2014-09-18 59 views
0

我有兩個出現在特定實例中的模態。我想要一個測試來執行實例,並檢查模態是否可見,另一個測試假設模態是否可見,然後在模態內採取行動。Rspec在模塊前設置模態可見性爲true

假設這是可能的,在第二個測試中,如何將模態設置爲通過Rspec之前的塊可見?我意識到模式不必可見爲了讓我與它的組成形式的工作,但我想這樣做,因爲我運行一個集成測試,其中:

  1. 用戶看到的模式
  2. 用戶填寫模態
  3. 形式如果用戶錯誤地填寫表格,語氣仍然是可見的(即,形式不提交)
  4. 如果用戶填寫表單正確,模式變得不可見(即表單提交)

#3 /#4中的底層頁面URL都是相同的,這就是爲什麼模式可見性是我認爲可以測試的唯一東西(我也將測試是否存在錯誤消息,但在這種情況下,發生了這種情況我收到一條錯誤消息,表單仍然提交,所以我有點偏執)。

+0

你今天的單獨測試看起來像什麼?寫一個塊之前是一個抽象的術語,讓你的測試變得乾爽。除非在代碼中看到重複內容,否則不需要編寫這些代碼,因此可以根據需要使用盡可能多的代碼進行測試,然後重構。 – Anthony 2014-09-19 01:40:55

+0

我沒有第二組測試,因爲......其中存在這個問題。第一套是手動的,因爲一些Facebook整合有趣的業務,我仍然需要整理 – james 2014-09-19 04:35:17

回答

0

說出模式是爲註冊簡報:

it 'valid modal entry', js: true do 
    prev_count = NewsletterSubscribers.all.count 
    visit_page 
    click_modal_thing 
    fill_in "Email", with: "[email protected]" 
    click_button "Submit" 

    expect(page).to have_content "Successfully signed up for newsletter" 
    expect(NewsletterSubscribers.all.count).to eq prev_count + 1 
end 

it 'invalid modal entry', js: true do 
    prev_count = NewsletterSubscribers.all.count 
    visit_page 
    click_modal_thing 
    click_button "Submit" 

    expect(page).to have_content "Email can't be blank" 
    expect(NewsletterSubscribers.all.count).to eq prev_count 
end 

所以再根據我的意見,我離開你昨天晚上,我們清楚地看到這段代碼有一些重複,我們重構塊之前使用:

before(:each) do 
    @prev_count = NewsletterSubscribers.all.count 
    visit_page 
    click_modal_thing 
end 

it 'valid modal entry', js: true do 

    fill_in "Email", with: "[email protected]" 
    click_button "Submit" 

    expect(page).to have_content "Successfully signed up for newsletter" 
    expect(NewsletterSubscribers.all.count).to eq @prev_count + 1 
end 

it "invalid modal entry", js: true do 
    click_button "Submit" 

    expect(page).to have_content "Email can't be blank" 
    expect(NewsletterSubscribers.all.count).to eq @prev_count 
end 
+0

因此,這看起來像它使用其他測試來確認模式正在工作。通常我會同意這種方法,但是根據這個問題,我不確定爲什麼在這種情況下,我已經注意到所有測試都通過的情況,但無論出於何種原因的模式都沒有出現,或者出現錯誤,這就是爲什麼我希望使用'before'塊來強制更改可見性,而不是通過用戶流程 – james 2014-09-22 05:52:54

+0

功能規格用於測試用戶在您的網站上的行爲。您似乎想要測試某個視圖是否能產生您期望的效果。如果CSS真的是這裏的重要組成部分,那麼可以使用'within(:css,'modal-class')',但通常這會被視爲矯枉過正。 – Anthony 2014-09-22 11:59:08

+0

所以你說得對,我想測試視圖。但即使使用'within'語句也不會幫助我,因爲我不知道錯誤是什麼,但有時可見性不起作用,這就是爲什麼我想強制將它設置爲false以查看如果它恢復或不恢復,而不僅僅依賴於結果。我感覺到的是,沒有辦法做到這一點,在這種情況下,我會尋找替代方案。謝謝你的幫助! – james 2014-09-22 17:40:16