rspec дает неправильные сообщения об ошибках - PullRequest
1 голос
/ 21 декабря 2010

После 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)>'

Я пытался исправить это, рассматривая другие вопросы о переполнении стека, но безрезультатно. Мой гемфайл теперь выглядит так:

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 ]

2 голосов
/ 21 декабря 2010

Обратный след исходит от 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 голос
/ 21 декабря 2010

Я предполагаю, second и third не существует, когда вы звоните [@user, second, third] (ну, больше, чем догадка. Это то, что говорит ошибка;)).Они, вероятно, находятся в руководстве, чтобы предположить, что вы можете обрабатывать несколько объектов в этом коде.Попробуйте удалить их.

Если это не так, можете ли вы опубликовать ссылку на учебник, которому вы следуете, или предоставить дополнительную информацию о том, откуда second и third должны исходить?*

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...