RSpec 1.3.3 Rails 2.3.9 Webrat 0.7.3 "undefined method `assign`"
My spec
require 'spec_helper'
describe 'user_sessions/new.html.erb' do
let (:user_session) { mock_model(UserSession).as_null_object }
before do
assign(:user_session, user_session)
end
it 'should have the sign in header' do
render
rendered.should contain('Sign in')
end
end
Throws
1)
NoMethodError in 'user_sessions/new.html.erb should have the sign in header'
undefined method `assign' for #<Spec::Rails::Example::ViewExampleGroup::Subclass_1:0x1036835e0>
Gems:
group :test, :cucumber do
gem "cucumber-rails", "0.3.2"
gem "rspec-rails", "1.3.3"
gem "database_cleaner", "0.5.0"
# gem "capybara", "0.3.9"
gem "webrat"
gem "selenium-client", "1.2.18"
gem "sqlite3-ruby", "1.3.1"
gem "email_spec", "~> 0.6.3", :require => 'spec'
gem "factory_girl"
gem "launchy"
end
And spec_helper.rb
# This file is copied to ~/spec when you run 'ruby script/generate rspec'
# from开发者_开发知识库 the project root directory.
ENV["RAILS_ENV"] = 'test'
require File.expand_path(File.join(File.dirname(__FILE__),'..','config','environment'))
require 'spec/autorun'
require 'spec/rails'
# Uncomment the next line to use webrat's matchers
require 'webrat/integrations/rspec-rails'
# Requires supporting files with custom matchers and macros, etc,
# in ./support/ and its subdirectories.
Dir[File.expand_path(File.join(File.dirname(__FILE__),'support','**','*.rb'))].each {|f| require f}
Spec::Runner.configure do |config|
# If you're not using ActiveRecord you should remove these
# lines, delete config/database.yml and disable :active_record
# in your config/boot.rb
config.use_transactional_fixtures = true
config.use_instantiated_fixtures = false
config.fixture_path = RAILS_ROOT + '/spec/fixtures/'
# == Fixtures
#
# You can declare fixtures for each example_group like this:
# describe "...." do
# fixtures :table_a, :table_b
#
# Alternatively, if you prefer to declare them only once, you can
# do so right here. Just uncomment the next line and replace the fixture
# names with your fixtures.
#
# config.global_fixtures = :table_a, :table_b
#
# If you declare global fixtures, be aware that they will be declared
# for all of your examples, even those that don't use them.
#
# You can also declare which fixtures to use (for example fixtures for test/fixtures):
#
# config.fixture_path = RAILS_ROOT + '/spec/fixtures/'
#
# == Mock Framework
#
# RSpec uses its own mocking framework by default. If you prefer to
# use mocha, flexmock or RR, uncomment the appropriate line:
#
# config.mock_with :mocha
# config.mock_with :flexmock
# config.mock_with :rr
#
# == Notes
#
# For more information take a look at Spec::Runner::Configuration and Spec::Runner
end
This looks like a version confusion.
The notes on RSpec2 for Rails 3 say
assign(key, value) replaces assigns[key] = value from rspec-rails-1.3
As you're on the earlier version, you likely want the old form. So try changing
assign(:user_session, user_session)
to
assigns[:user_session] = user_session
精彩评论