RSpec 1.3.3 Rails 2.3.9 Webrat 0.7.3“未定义的方法`assign`" [英] RSpec 1.3.3 Rails 2.3.9 Webrat 0.7.3 "undefined method `assign`"

查看:39
本文介绍了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 #<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

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.

RSpec2 for Rails 3 的注释

assign(key, value) 替换了 rspec-rails-1.3 中的assigns[key] = value

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)

assigns[:user_session] = user_session

这篇关于RSpec 1.3.3 Rails 2.3.9 Webrat 0.7.3“未定义的方法`assign`"的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆