2011-03-30 83 views
4

我的规格RSpec的Rails的1.3.3 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 #<Spec::Rails::Example::ViewExampleGroup::Subclass_1:0x1036835e0> 

宝石:

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 
+0

你在期待这样的方法:做什么? – 2011-03-30 21:22:53

+0

它应该分配一个实例变量以便在视图中使用。该视图调用@user_session,它将返回nil并导致规范失败,因为该视图无法呈现。 – jaredonline 2011-03-30 21:25:47

+0

我以前用过它......我把它从David Chelimsky的RSpec书中拿出来 – jaredonline 2011-03-30 21:27:01

回答

7

这看起来像一个版本混淆。

notes on RSpec2 for Rails 3

分配(键,值)RSpec的护栏,1.3

正如你在以前的版本,你可能要替换受让人[关键] =价值旧的形式。因此,尝试改变

assign(:user_session, user_session) 

assigns[:user_session] = user_session 
+1

太棒了!此外,“呈现”已从“响应”更改为 – jaredonline 2011-03-30 21:56:57

+0

感谢哥们,很高兴知道! – 2011-04-01 09:44:38

相关问题