#ruby-on-rails #ruby-on-rails-3 #rspec
#ruby-on-rails #ruby-on-rails-3 #rspec
Вопрос:
Я работаю над приложением goal, где пользователь может установить флажок рядом с целью, чтобы пометить его как завершенный. Я написал тест для этой функциональности, но что-то не совсем так, потому что он продолжает давать сбой. В конце концов мне это надоело, и я просто написал код, который работает, но тест по-прежнему терпит неудачу. Я все еще изучаю Rspec, поэтому любой совет, который вы могли бы мне дать, был бы полезен.
Тест
# @user has already been signed in
describe "completing a goal" do
before(:each) do
@goal = Factory(:goal, :user => @user)
end
it "should set 'completed' attribute to true" do
visit edit_goal_path(@goal)
check('goal_completed')
click_button('goal_submit')
@goal.completed.should be_true
end
end
Результат
Failures:
1) Goals completing a goal should set 'completed' attribute to true
Failure/Error: @goal.completed.should be_true
expected nil to be true
# ./spec/requests/goals_spec.rb:81:in `block (3 levels) in <top (required)>'
Ответ №1:
Если вы хотите, чтобы это был интеграционный тест, было бы лучше, чтобы ваше утверждение касалось содержимого страницы. Что-то вроде:
assert_text "Goal met on 1/1/2011"
Если вы хотите придерживаться утверждений модели, я почти уверен, что вам просто нужно перезагрузить: @goal.reload.completed.should be_true
Комментарии:
1. Исправлено, спасибо! Разве я не поместил бы это в спецификацию контроллера, если бы придерживался completed. должно быть_true, поскольку оно имеет дело с фактическим контроллером?