Я разрабатываю приложение Rails 3.2 с тестовым покрытием, но по какой-то причине некоторые из моих тестов терпят неудачу. Та же спецификация работает для другой модели.Stange Rspec test failing
Спектры работают с Rspec, FactoryGirl, Shoulda-Matchers.
Это недостаток спецификации: http://pastebin.com/8VWCAv79
Ошибки:
Failures:
1) PlacesController POST create when user is logged in with valid params redirects to the created place
Failure/Error: response.should redirect_to(Place.last)
Expected response to be a <:redirect>, but was <200>
# ./spec/controllers/places_controller_spec.rb:109:in `block (5 levels) in <top (required)>'
2) PlacesController POST create when user is logged in with valid params assigns a newly created place as @place
Failure/Error: assigns(:place).should be_persisted
expected persisted? to return true, got false
# ./spec/controllers/places_controller_spec.rb:104:in `block (5 levels) in <top (required)>'
3) PlacesController POST create when user is logged in with valid params creates a new Place
Failure/Error: expect {
count should have been changed by 1, but was changed by 0
# ./spec/controllers/places_controller_spec.rb:96:in `block (5 levels) in <top (required)>'
Finished in 4.63 seconds
21 examples, 3 failures
Failed examples:
rspec ./spec/controllers/places_controller_spec.rb:107 # PlacesController POST create when user is logged in with valid params redirects to the created place
rspec ./spec/controllers/places_controller_spec.rb:101 # PlacesController POST create when user is logged in with valid params assigns a newly created place as @place
rspec ./spec/controllers/places_controller_spec.rb:95 # PlacesController POST create when user is logged in with valid params creates a new Place
Довольно же спецификации присутствуют в другом файле, http://pastebin.com/r8HtAwSR и правильно мимоходом, без проблем.
Это контроллер файлы:
- http://pastebin.com/C40Bti0m (отсутствие спецификация)
- http://pastebin.com/AHnn3Nh0 (рабочая спецификация)
Может кто-нибудь предложить мне, как решить эту проблему?
К сожалению, это не помогло в решении проблемы ... Странно, что модель проходит все проверки, которые запускаются с использованием той же фабрики, что и в контроллере, поэтому атрибуты равны ... – endorama
@ endorama просто ставит «binding.pry» не решает проблему - конечно. Дело в том, что после того, как у вас есть binding.pry, вы можете затем изучить свою программу, чтобы узнать, что происходит, вы можете «cd» входить и выходить из объектов, показывать источник методов, запускать код и т. Д. У вас есть полный доступ к состоянию всей вашей программы в этот момент, и вы находитесь в гораздо лучшем положении, чтобы найти корень проблемы. – horseyguy
@endorama это не означает, что вы решите свою проблему. Это должно помочь вам узнать, что случилось. Поместите «привязывать pry» в тест, запустите тестовый пакет, выполнение остановится в точке, где вы вставили привязку, измените свой терминал (на один, где работает ваш сервер) и попробуйте «Place.last». Это то, чего вы ожидали? Если не проверить свои действительные_трибуты. Действительно ли они действительны? Что будет возвращено, если вы сделаете что-то вроде «place = Place.new (valid_attributes); place.valid ?;. Если false, проверьте свои ошибки проверки «place.errors», если это правда, проблема находится где-то еще ... –