2014-02-25 38 views
10

我有一組測試導致用戶登錄的Facebook頁面。不幸的是,這個頁面有一些我無法影響的JavaScript錯誤,所以我的測試永遠不會完成。在Poltergeist中暫時設置js_errors爲false

有沒有辦法暫時禁用JS錯誤檢查?我在考慮類似於:Capybara.javascript_driver.js_errors = false,稍後將其設置爲true,但不幸的是,這不起作用。我嘗試過這種變化無濟於事。

關於如何解決我的問題的任何想法?

+1

您可以將測試代碼封裝到try {} catch(e){}塊嗎?我的意思是Facebook頁面打開的部分。或者測試自己不寫在JavaScript? –

回答

10

感謝Roman Pominov的評論,我找到了解決方案。其實很簡單:

我剛剛在問題陳述後添加了rescue Capybara::Poltergeist::JavascriptError,然後它就像一個魅力。我最初的想法是過於複雜;)

+0

你最初的想法是什麼?我有大量的測試,所以禁用前/後塊中的js_errors比向每個測試添加挽救語句更可取 – cjhin

+0

好吧,如果可能的話,我會建議處理所有JS錯誤(畢竟它們是錯誤的) 。如果不可能的話,我會堅持'救援'。據我所知,我最初的想法是在問題中描述的。有沒有可能解決這些JS錯誤? – TrashyMcTrash

+0

啊,我不好,我想也許你有另一個想法,你刪除了編輯。它的JS錯誤是拋出一個外部服務?我想我的更大的問題是,我有一個功能規格首先訪問外部服務。 – cjhin

6

這使得招:

page.driver.browser.js_errors = false 

您也可以圍繞回調添加:

# spec_helpers.rb 
config.around(:each) do |example| 
    original_value = page.driver.browser.instance_variable_get(:@js_errors) 
    if example.metadata.has_key?(:js_errors) 
    page.driver.browser.js_errors = example.metadata[:js_errors] 
    end 

    example.run 

    page.driver.browser.js_errors = original_value 
end 

在你的測試:

# my_feature_spec.rb 
it "should ignore errors", js_errors: false do 
    ... 
end 
+0

如果你有非請求規格,這將不起作用,對吧?頁面將被定義爲其他規格? – Ibrahim

+0

請注意,如果您在例如Cucumber中採用這種方法,那麼JS錯誤仍將在所有後續測試中被禁用! – Alec

相關問題