Ошибка rspec: изучение Rails на примере: у вас есть нулевой объект, когда вы его не ожидали - PullRequest
0 голосов
/ 09 декабря 2011

Я получаю странную ошибку rspec при прохождении учебника Учебного Rails by Example Майка Хартла.

На стр. 419, листинг 10.30: Код выглядит следующим образом:

it "should have an element for each user" do
get :index
@users[0..2].each do |user|
response.should have_selector("li", :content => user.name)
end
end

И когда я запускаю rspec, я получаю это сообщение об ошибке.:

Сбои:

1) UsersController GET 'index' for signed-in-users should have an element for each user
    Failure/Error: @users[0..2].each do |user|
    NoMethodError:
      You have a nil object when you didn't expect it!
      You might have expected an instance of Array.
      The error occurred while evaluating nil.[]
    # ./spec/controllers/users_controller_spec.rb:40

Finished in 2.58 seconds 75 examples, 1 failure

Failed examples:

rspec ./spec/controllers/users_controller_spec.rb:38 # UsersController GET 'index' for >signed-in-users should have an element for each user

Я провел некоторые исследования и обнаружил подобные проблемы в этой теме, но все еще не смогчтобы пройти тест.

Есть идеи?

Справочные ссылки:

Почему мои тесты RSpec не проходят, а мое приложение работает?

Файлы cookie не сохраняются в Rspec на рельсах 3.1

Руководство по Rails, глава 10.3.3 - 4 ошибки RSpec (приложение работает)

Ответы [ 2 ]

0 голосов
/ 10 декабря 2011

Я только что понял.

@users[0..2].each do |user|

необходимо стать:

User.paginate(:page => 1).each do |user|

Приложение по-прежнему работает с любой строкой, но для прохождения теста rspec необходимо использовать User.paginate.

0 голосов
/ 09 декабря 2011

Похоже, что пользователи не создаются в тестовой БД. Проверьте, есть ли у вас несколько пользователей в @users, вставив

puts @users.length

после 'get: index'

Если это ноль, вам, вероятно, следует дважды проверить свой блок перед.

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