我正在關注Michael Hartl的Ruby on Rails教程(railstutorial.org)。config.cache_classes = false搞砸了rspec測試?
在某些時候,我厭倦了測試失敗,因爲測試使用了舊的緩存版本的類,所以我關閉了測試環境中的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 => "[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
將繼續留在每次測試後的數據庫,所以僅在第一次這個測試運行它會工作,之後,它總是失敗,直到我手動清空數據庫。 除此之外,它的工作。 但現在在第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使測試失敗?我怎樣才能關閉緩存而不會搞亂我的測試?
由於事先
最好的問候,托比亞斯