0

我有一個與我的硒測試的問題,它看起來像測試數據不會被添加到正確的環境或硒試圖讀取錯誤的。硒與水豚失敗測試

的下面測試通過,而不:js => true但與它失敗

it "allows the user to create a new test", :js => true do 
    FactoryGirl.create(:user, email:'[email protected]', password:'passw0rd') 

    p 'Here' 
    p User.all 

    visit '/' # Login view 

    fill_in "email", with: '[email protected]' 
    fill_in "password", with: "passw0rd" 
    click_button 'Login' 

    expect(current_path).to eq '/home' 
end 

,因爲用戶不獲取登錄並因此沒有達到「/家」的測試失敗。我加了打印輸出,以查看用戶是否實際上被添加到該數據庫中,這是...

"Here" 
#<ActiveRecord::Relation [#<User id: 1, email: "[email protected]", password: "$2a$10$JQBuNH95JWDjCTx0OH7JMuxcO.0XgAz6wtYc/2G8pps...", created_at: "2014-08-27 11:34:44", updated_at: "2014-08-27 11:34:44">]> 

然而,當我又增加了打印出我login_controller

def create 
    p 'Here 2' 
    p User.all 
    ... # User authenitcation 
end 

控制檯看起來像

"Here" 
#<ActiveRecord::Relation [#<User id: 1, email: "[email protected]", password: "$2a$10$JQBuNH95JWDjCTx0OH7JMuxcO.0XgAz6wtYc/2G8pps...", created_at: "2014-08-27 11:34:44", updated_at: "2014-08-27 11:34:44">]> 
"Here 2" 
#<ActiveRecord::Relation []> 

因此,對於一些原因,在試驗所添加的用戶不是在驗證正在進行時的數據庫,導致我認爲硒是廁所國王在不同的環境下,即應該在考慮測試時的發展?

如果它幫助這裏是我的一些spec_helper文件與database_cleaner配置

... 

RSpec.configure do |config| 

    config.use_transactional_fixtures = false 

    config.before(:suite) do 
     DatabaseCleaner.strategy = :truncation 
    end 

    config.before(:each) do 
     DatabaseCleaner.strategy = :transaction 
    end 

    config.before(:each, :js => true) do 
     DatabaseCleaner.strategy = :truncation 
    end 

    config.before(:each) do 
     DatabaseCleaner.start 
    end 

    config.after(:each) do 
     DatabaseCleaner.clean 
    end 

    ... 
end 

就如何解決這一問題有什麼想法?我不知道Selenium是看錯了環境還是我的database_cleaner配置錯了

回答

0

p在create action中的輸出並不是太奇怪 - 我相信JS測試運行在不同的線程中(瀏覽器和服務器沒有同步),所以在創建動作中執行p時,世界的狀態可能會有所不同。你可以做的一件事是確認是否存在計時問題,在click_button步驟之後立即在測試中加上一個等待(如sleep(3))。

這有道理嗎?

+0

這絕對不是一個計時問題,因爲我已經改變了Capybara的默認等待時間,並且在運行時觀察測試(如果登錄不成功,就會顯示一條消息)。如果Selenium測試仍然沒有從相同的環境中讀取,即當'login_controller'執行'create'動作時'測試'?如果不是,你應該如何測試一個頁面,JS依賴於數據庫中的記錄? – SteWoo 2014-08-27 19:28:01

+0

我假設你已經嘗試單獨運行測試?您可以嘗試從混合中清除數據庫清理器,並在每次運行spec之後通過運行'bundle exec rake db:test:prepare'手動重置測試數據庫。 – dleve123 2014-08-28 00:10:37

+0

是的,我正在運行它自己的。我刪除了數據庫清理器配置,並在事務性和非事務性夾具之間切換,但沒有運氣。我也嘗試了很多不同的數據庫清潔配置組合,但仍然沒有運氣。問題似乎是在測試中打印出數據時,數據在模型中,但是在控制器中打印輸出時模型中沒有數據。任何想法爲什麼? – SteWoo 2014-08-28 09:15:18