Протестировано в браузере и прекрасно работает. Ошибка теста говорит, что «ожидаемый результат изменился с 0 на 1, но не изменился». Это проблема фабрики или проблема с rspec? Почему это не меняется?Rspec тестирует контроллер, используя от?
Ошибка:
Failures:
1) ShortLinksController Short links controller Clicking a short link increments the click counter by 1
Failure/Error: expect{ get :url_dispatch, { id: short_link.short_link } }.to change{short_link.click_counter}.from(0).to(1)
expected result to have changed from 0 to 1, but did not change
# ./spec/controllers/short_links_controller_spec.rb:34:in `block (4 levels) in <top (required)>'
Rspec:
it "increments the click counter by 1" do
short_link = create(:short_link)
expect{ get :url_dispatch, { id: short_link.short_link } }.to change{short_link.click_counter}.from(0).to(1)
end
Контроллер:
def url_dispatch
id = params[:id]
record = ShortLink.where(["short_link = ?", id]).first
if record.update(click_counter: record.click_counter + 1)
redirect_to record.redirect_to
else
render '/not_found'
end
end
Фабрика:
FactoryGirl.define do
factory :short_link do
redirect_to "http://google.com"
title "This is the google page"
short_link "xGh7u"
click_counter 0
owner Owner.create!(first_name: "Bob", last_name: "Diller", email: "[email protected]")
end
end
Я думаю, что это вопрос «FactoryGirl», основанный на том, что тот же код работает нормально, если вы вызываете модель вместо фабрики. Я использую 'reload', чтобы обойти это сейчас в своих тестах контроллера, но мне любопытно, есть ли у кого-нибудь ответ. – Anthony
Эй, Энтони, это интересно. Я думаю, что это проблема FG. Можете ли вы опубликовать свою работу в качестве ответа. Благодарю. – fyz