我想測試一個簡單的登錄流程,它需要測試數據庫中存在的用戶。無法創建用戶使用rspec進行水豚測試
describe 'Signin page' do
before :each do
User.generate(:email => '[email protected]', :password => 'palmdrive', :first_name => 'Automatic', :last_name => 'Tester')
end
it 'signs in a user', :js => true do
signin
current_path.should == redirect_path
end
end
def signin
## Action to sign in the user
end
## Use DatabaseCleaner since selenium driver is used
DatabaseCleaner.strategy = :truncation
RSpec.configure do |config|
config.use_transactional_fixtures = false
config.before :each do
DatabaseCleaner.start
end
config.after :each do
DatabaseCleaner.clean
end
end
由於創建用戶的方式稍微複雜一點,所以我定義了User.generate方法來創建用戶。爲了確保它實際工作,在帶有測試環境的rails控制檯上運行,它運行了User.generate(:email => '[email protected]', :password => 'palmdrive', :first_name => 'Automatic', :last_name => 'Tester')
它成功地在數據庫中創建了一個用戶。註釋掉之前:每個測試套件都已成功通過。
但問題是運行上面的代碼,測試失敗。這是由於用戶無法在數據庫中創建的。爲什麼User.generate方法不能創建用戶?
如前所述,創建用戶的機制比User.create複雜,這就是爲什麼我在用戶模型中定義User.generate的原因 –
這取決於您的生成方法是如何實現的。大多數記錄不會被保存/寫入數據庫。你可以通過在對象上調用reload來測試它,並且實際看它是否在那裏。我敢打賭,它不是 – lsaffie
它在那裏。這就是爲什麼如果我首先通過控制檯中的User.generate(..)手動創建用戶,並註釋掉before:每個塊,測試通過 –