2012-11-29 34 views
0

我正在嘗試在集成測試期間創建用戶以用於某些操作。我使用的設計是:可以確認的。代碼如下:在Capybara集成測試(和Selenium webdriver)期間設計用戶創建失敗

user = User.create({username: "user1", password: "pass1234", password_confirmation: "pass1234", email: "[email protected]"}) 
user.confirm! 
fill_in "Username", :with => user.username 
fill_in "Password", :with => user.password 
click_button "Sign in" 

問題是登錄失敗,每次我嘗試它。沒有關於用戶創建的錯誤,但出於某種原因,當我嘗試登錄時,用戶似乎沒有「在那裏」。當我嘗試登錄時,我只是收到了'無效的用戶名或密碼'。這似乎與事實有關,可能是因爲在試圖登錄之前,Capybara/Selenium webdriver沒有正確等待數據庫操作發生。如果是這樣的話,我怎麼測試它或修復它?

即使在集成測試期間嘗試插入數據庫,是否「錯誤」?

回答

1

我不使用設計自己,所以不能在您遇到的問題的細節置評,但這個問題引起我的注意:

它是「錯誤的」,甚至試圖在集成測試期間插入數據庫?

是的,我會說它一般是。

你的集成測試應該但從用戶的角度測試代碼:

  • 預期應該只依賴於哪些用戶可以實際看到
  • 操作應該只對應於用戶實際上可以執行的操作執行

在數據庫中插入內容超出了用戶可以使用的範圍。這可能是單元測試的事情,但不適用於集成測試。

這就是說,你可能會爭辯說,播種數據庫數據是這個規則的一個例外,因爲你正在爲你的測試設置上下文(請參閱下面的評論)。

+0

這是非常有益的,謝謝。清理一些事情。所以即使我能解決我的問題,至少我知道在將來不要這樣做。 – aardvarkk

+0

我添加了一個註釋,因爲我注意到你的數據庫訪問是設置上下文的。這是我猜想的一個灰色地帶。你絕對不應該在你的測試中添加數據庫條目,但是創建用戶數據也許是可以的(而不是讓用戶通過界面創建一個賬戶,然後*在你的測試中做這些動作,這將是替代方案)。 –

相關問題