Я следую учебному пособию по Ruby on Rails Майкла Хартла (railstutorial.org).
В какой-то момент я устал от неудачных тестов, потому что в тестах использовались старые кэшированные версии классов, поэтому я отключил config.cache_classes в тестовой среде.Это решило проблему, и некоторое время все шло хорошо.
Пока я не попытался реализовать интеграционные тесты в главе 8.4.3.На этом этапе данные, введенные в базу данных с помощью
it "should make a new user" do
lambda do
visit signup_path
fill_in "Name", :with => "Example User"
fill_in "Email", :with => "user@example.com"
fill_in "Password", :with => "foobar"
fill_in "Confirmation", :with => "foobar"
click_button
response.should have_selector("div.flash.success",
:content => "Welcome")
response.should render_template('users/show')
end.should change(User, :count).by(1)
end
, будут оставаться в базе данных после каждого теста, поэтому только при первом запуске этого теста он будет работать, после чего он всегда завершается ошибкой, пока я не опорожню вручнуюбаза данных.Помимо этого это сработало.Но теперь, в главе 9, снова интеграционный тест не пройден:
describe "when signed in" do
before(:each) do
@user = Factory(:user)
visit signin_path
fill_in :email, :with => @user.email
fill_in :password, :with => @user.password
click_button
end
it "should have a signout link" do
visit root_path
response.should have_selector("a", :href => signout_path,
:content => "Sign out")
end
На этот раз он просто не работает, пользователь не входит в систему, и на полученной странице нет ссылки для выхода, просто нормальнаявойдите в ссылку.При тестировании этого в веб-браузере все работает нормально.
Мне потребовались часы и дни поиска в Интернете и тестирования различных вещей, и, наконец, я нашел решение: снова включить config.cache_classes.Теперь это работает безупречно.
Так может кто-нибудь объяснить мне, почему config.cache_classes делает тесты неудачными?И как я могу отключить кэширование, не испортив мои тесты?
Заранее спасибо,
С уважением, Тобиас