4

I'm getting the following error:

undefined method `assign' for #<RSpec::Core::ExampleGroup::Nested_1:0x0000010597f4b8>

When attempting to test per the docs.

Here's is what I have:

user_controller_spec.rb

require 'spec_helper'

describe "devise/sessions/new.html.erb" do
  let(:user) do
    stub_model(User).as_new_record
  end

  before do
    assign(:user, user)
    # Devise provides resource and resource_name helpers and
    # mappings so stub them here.
    @view.stub(:resource).and_return(user)
    @view.stub(:resource_name).and_return('user')
    @view.stub(:devise_mapping).and_return(Devise.mappings[:user])
  end

  it "renders a form to sign the user in" do
    render
    rendered.should have_selector("form",
                                  :method => "post",
                                  :action => user_session_path
                                  ) do |form|
      form.should have_selector("input", :type => "submit")
    end
  end
end

Suggestions? Thanks

apneadiving
  • 114,565
  • 26
  • 219
  • 213
AnApprentice
  • 108,152
  • 195
  • 629
  • 1,012

1 Answers1

4

Rspec has changed a bit, it's now using assigns.

Doc here.

apneadiving
  • 114,565
  • 26
  • 219
  • 213
  • Thanks, would love to get your feedback on my follow-up question. I'm really lost on how to get started and right tests for devise: http://stackoverflow.com/questions/7223549/howto-write-tests-for-devise-omniauth-in-my-rails-3-app – AnApprentice Aug 28 '11 at 20:39
  • When changing to assigns it still errors with: Failure/Error: assigns(:user, user) ArgumentError: wrong number of arguments (2 for 1) – AnApprentice Aug 28 '11 at 21:45
  • So I changed it to: assigns[:user] = user which causes it to now error on undefined local variable or method `render' for # – AnApprentice Aug 28 '11 at 21:46
  • You use deprecated methods, browse the doc here: http://rspec.info/rails/writing/controllers.html – apneadiving Aug 28 '11 at 22:04