rspec提供不正确的错误消息

时间:2010-12-20 22:37:17

标签: ruby-on-rails rspec

在RailsTutorial之后,我一直在收到此错误消息(实际上是四个中的一个):

UsersController authentication of edit/update pages for signed-in 
users should require matching users for 'edit'
Failure/Error: @users = [@user, second, third] undefined local variable
or method 'second' for
#<RSpec::Core::ExampleGroup::Nested_3::Nested_7::Nested_2:0x000001040dcb68> #
./spec/controllers/users_controller_spec.rb:275:in 'block
(4 levels) in <top (required)>'

我试图通过查看有关堆栈溢出的其他问题来修复它,但无济于事。我的gemfile现在看起来像这样:

gem 'rails', '3.0.3'
gem 'sqlite3-ruby', '1.2.5', :require => 'sqlite3'
gem 'gravatar_image_tag', '0.1.0'
gem 'will_paginate', '3.0.pre2'

group :development do
  gem 'rspec-rails', '2.0.1'
  gem 'annotate-models', '1.0.4'
  gem 'faker', '0.3.1'
end

group :test do
  gem 'rspec-rails', '2.0.1'
  gem 'webrat', '0.7.1'
  gem 'spork', '0.8.4'
  gem 'factory_girl_rails', '1.0'
end

任何建议都将不胜感激!

2 个答案:

答案 0 :(得分:2)

回溯来自users_controller_spec。没有来源,很难说,但我猜它是这样的:

describe UsersController
  before do
    @user = Factory(:user)
    sign_in(@user)
  end

  context "GET to edit for another user" do
    before do 
      @other_user = Factory(:user)
      get :edit, :id => @other_user
    end

    it "should disallow editing of other users" do
      # ... expectations here of HTTP 401 or a user-friendly message
    end
  end
end

请注意,#before块和示例之间共享的变量是实例变量 - 不会在它们之间共享局部变量。我猜你的代码可能试图在示例之间或#before块与其示例之间共享本地。

答案 1 :(得分:1)

当你打电话给second时,我猜测third[@user, second, third]不存在(好吧,不仅仅是猜测。错误说的是什么;))。他们可能在教程中建议您可以在此代码中处理多个对象。尝试删除它们。

如果不是这样,您是否可以发布您正在关注的教程的链接,或提供有关secondthird应该来自何处的更多背景信息?