2013-05-03 33 views
3
下失效

我有以下規格:水豚斷言騷靈

# MUST BE TESTED WITH JAVASCRIPT. As you can see before, it is allowing 
# the Log Out link. On a real page, that element is hidden. 
it "logs out a user" do 
    user = login_user 
    click_link user.email 
    click_link "Log Out" 
    assert page.has_content?('Logged out') 
    assert page.has_content?('Company Profile') 
end 

login_user方法是我spec_helper.rb文件,如下所示:

def login_user(admin = false) 
    user = FactoryGirl.create(:user, :admin => admin) 
    visit login_path 
    fill_in 'Email', :with => user.email 
    fill_in 'Password', :with => user.password 
    click_button 'Go' 
    assert page.has_content?('Logged in') 
    user 
end 

那當我添加, js: true去年assert失敗我的規格。

當我在它之前做一個save_and_open_page之後,UP就會出現零CSS的頁面,並且可能沒有JS。由於某些原因,它沒有閱讀資產。我認爲,當你運行測試時,它會像在開發模式中那樣讀取資產。我真的需要幫助。

+0

請給出錯誤信息?你在使用Devise嗎?或者你的會話#刪除方法? – 2013-05-03 19:15:56

+0

沒有錯誤信息,除非我在斷言中添加一個。斷言失敗。當我啓用:js => true時,它無法在頁面上找到「已登錄」。如果我放棄它,它可以正常工作。 Poltergeist有一些導致水豚不讀的頁面。 – AKWF 2013-05-03 19:37:24

+0

我建議你在集成測試中使用Capybara/Rspec首選語法。您可以使用'page.should have_content('Logged in')'而不是'assert'。我不知道細節,但我總是會在Rspec中獲得有用的錯誤消息。 – 2013-05-03 19:46:15

回答

6

我在this question找到了答案。這非常棘手。我仍然不知道究竟爲什麼這個失敗的第一位,但不用說與RSpec/Capybara/PhantomJS/Poltergeist/Guard/Spork/FactoryGirl有很多移動部件。

請點擊鏈接查看答案。它必須與交易裝置並啓用寶石。如果兩次陳述答案並沒有任何好處,我會留下那個作爲正則答案。

UPDATE 

實際上這個問題與數據庫連接在Poltergeist/PhantomJS下不共享的方式有關。 Plataformatec的傢伙在他們的blog上有一個優秀的解決方案,它不涉及使用DatabaseCleaner gem。

重要提示

對於誰也使用叉勺Postgres的用戶,如規定的博客解決方案將無法工作。換句話說,如果您將shared_db_connection.rb文件放入您的spec/support目錄中,您將收到一條PG::Error connection closed消息。保留在文件中spec/support但刪除此行:

ActiveRecord::Base.shared_connection = ActiveRecord::Base.connection 

,而是把在你Spork.each_run塊在spec_helper.rb文件。