config.cache_classes = falsificação de testes rspe
Estou seguindo o Tutorial Ruby on Rails de Michael Hartl (railstutorial.org
Em algum momento, eu me cansei de falhar nos testes, apenas porque os testes usavam versões antigas em cache das classes, então desativei o config.cache_classes no ambiente de teste. Isso resolveu o problema e tudo correu bem por algum tempo.
Até tentei implementar os testes de integração no capítulo 8.4.3. Nesse ponto, os dados inseridos no banco de dados com
it "should make a new user" do
lambda do
visit signup_path
fill_in "Name", :with => "Example User"
fill_in "Email", :with => "[email protected]"
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
permaneceria no banco de dados após cada teste, portanto, apenas a primeira vez que esse teste fosse executado funcionaria, depois disso sempre falha até eu esvaziar manualmente o banco de dados. Além disso, funcionou. Mas agora no capítulo 9, novamente o teste de integração falha:
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
Desta vez, simplesmente não funciona, o usuário não está logado e a página resultante não possui um link de logout, apenas o link normal de logon. Ao testar isso em um navegador da web, ele funciona be
Demorei horas e dias pesquisando na Internet e testando coisas diferentes e, finalmente, encontrei a solução: reativando o config.cache_classes. Agora, ele funciona perfeitament
Alguém pode me explicar por que config.cache_classes faz com que os testes falhem? E como posso desativar o cache sem atrapalhar meus testes?
Desde já, obrigado
tenciosamente, Tobias