2011-03-30 79 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

相關問題