RSpec 1.3.3 Rails 2.3.9 Webrat 0.7.3“未定义方法`assign`”
我的规格
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
抛出
1) NoMethodError in 'user_sessions/new.html.erb should have the sign in header' undefined method `assign' for #
gem:
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
和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
这看起来像版本混乱。
RSpec2 for Rails 3的注释说
assign(key,value)用rspec-rails-1.3替换assign [key] = value
正如您在早期版本中所做的那样,您可能想要旧版本。 所以尝试改变
assign(:user_session, user_session)
至
assigns[:user_session] = user_session
- 如何使用以前版本的Rspec运行我的规范?
- 为什么我不建议“在全球范围内包括Capybara :: DSL!”
- ActionDispatch :: Http :: UploadedFile.content_type未在Rspec测试中初始化
- Shoulda Matcher和has_many通过:未定义的方法`class_name’为nil:NilClass
- 如何在RSpec中模拟类方法期望语法?
- 如何rspec模拟ruby rails logger类
- 为什么我不能创建在rspec中计算某些内容的活动记录?
- 如何使用RSpec正确测试CanCan能力
- 针对exception传递的should_receive和should_not_receive的RSpec