2016-04-25 225 views
2

我正在編寫一個功能測試,現在正在嘗試測試編輯操作。這對我來說有點奇怪,因爲它沒有看到我通常運行RSpec時所期望的結果,但是當我使用save_and_open_page命令時,它顯示出我期望的實際上是在瀏覽器中。我認爲這是一個硒問題,但我是rspec新手,我不確定。我被建議使用「睡眠」或「暫停」,但我不確定如何使用這些方法,我找不到任何好的文檔。我想知道如果有人能夠給我一個有效的方式來使用我當前的代碼?調用RSpec睡眠

TEST

require "rails_helper" 

RSpec.feature "Edit 'Bounce Back' Message", :type => :feature do 
given!(:group) { Group.create!(name: "Group A", response: "You are now subscribed for updates") } 

scenario "Staff can see the response messages" do 
visit "/groups" 

    user = FactoryGirl.create(:user) 
    fill_in "Email", with: user.email 
    fill_in "Password", with: user.password 
    click_button "Sign in" 

    expect(page).to have_content("You are now subscribed for updates") 
    expect(page).to have_content("Group a") 
end 
scenario "Staff can edit the response messages" do 
    visit "/groups/#{group.id}/edit" 

    user = FactoryGirl.create(:user) 
    fill_in "Email", with: user.email 
    fill_in "Password", with: user.password 
    click_button "Sign in" 

    expect(page).to have_content("You have now subscribed for updates") 
end 
end 

我希望這是足夠的信息,請讓我知道如果你需要更多。謝謝! 我也試過使用rspec_wait,但它仍然發送錯誤。這裏是

enter image description here

<div class="container text-center"> 
    <div class="row"> 
    <div class="col-lg-8 col-lg-offset-2 well"> 
    <%= form_for @group do |form| %> 
     <div class="form-group"> 
     <%= form.label :body, "Edit The Response:", class: "message_label"%> 
     <%= form.text_field :response, class: "form-control", placeholder: "New things are happening!" %> 
     </div> 
     <%= form.submit "Update", class: "btn btn-primary" %> 
    <% end %> 
    </div> 
</div> 
</div> 
+1

不要睡覺;讓水豚等你。你的例子對我來說很好,他們在哪裏失敗? –

回答

1

對於這個問題,目前公認的答案是錯的。無需使用rspec-wait與水豚匹配器,因爲他們已經有內置的等待/重試行爲。您可以調整使用Capybara.default_max_wait_time或將wait: <time in seconds>選項傳遞給匹配器的等待/重試的時間長度。

從閱讀問題和附加圖片我假設「工作人員可以看到響應消息」測試正在通過,但「工作人員可以編輯響應消息」測試失敗。如果是這樣,很可能是因爲在編輯頁面上,「您現在訂閱了更新」字符串實際上是字段(文本框等)的內容而不是頁面的文本內容。 have_content用於檢查文本節點內容的網頁上,以測試場與給定值,你會使用類似

expect(page).to have_field('Response', with: 'You have now subscribed for updates') 

,它假定在與現場以「響應」的文本相關的標籤,如果不是,你可以通過字段,名稱等的ID,或者從Capybara 2.7開始,你可以通過零,它只會查找具有給定值的任何字段 - 完全取決於你需要測試的內容。

expect(page).to have_field(nil, with: 'You have now subscribed for updates') 
+0

你是對的!謝謝湯姆。然而,當我嘗試'expect(page).to have_field('Response','你現在已經訂閱了更新')'我仍然失望。沒有比賽。 – Bitwise

+0

@CameronBass正如我在我的答案中所述 - 假定有一個與文本框(或任何類型的域)相關的標籤,並帶有文本「響應」 - 如果沒有,您可以使用它的標識或名稱等 - 或者如果使用Capybara 2.7+通過零,只是驗證值 –

+0

@CameronBass如果你不知道如何正確調用它 - 將頁面的該區域的HTML添加到您的問題 –