2016-04-25 2 views
2

Я пишу функциональный тест прямо сейчас, который пытается проверить действие редактирования. Мне это немного странно, потому что я не вижу того, чего ожидаю, когда я запускаю RSpec, но когда я использую команду save_and_open_page, он показывает, что то, что я ожидаю, действительно присутствует в браузере. Я думаю, что это проблема селена, но я новичок в rspec, и я не уверен. Мне было предложено использовать «Сон» или «Пауза», но я не уверен, как использовать эти методы, и я не могу найти никаких хороших документов на нем. Мне интересно, может ли кто-нибудь показать мне правильный способ использовать это в моем текущем коде?Вызов RSpec sleep

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, так как они уже имеют встроенное поведение ожидания/повторной попытки. Вы можете отрегулировать, как долго они ожидают/rety для использования Capybara.default_max_wait_time, или передают опцию wait: <time in seconds> для сопряжения.

От чтения вопроса и прилагаемого изображения я предполагаю, что тест «Сотрудники могут видеть ответные сообщения» проходит, но тест «Персонал может редактировать ответные сообщения» не удается. Если это так, скорее всего, потому что на странице редактирования строка «Вы подписаны на обновления» на самом деле представляет собой содержимое поля (текстовое поле и т. Д.), А не текстовое содержимое страницы. have_content используются для проверки содержимого текстового узла на странице, чтобы проверить на поле с заданным значением, которое вы бы использовать что-то вроде

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

Это предполагает, что есть метка, связанная с полем с текстом «Response» , если вы не можете передать идентификатор поля, имени и т. д. или с Capybara 2.7, вы можете передать нуль, и он будет просто искать любое поле с заданным значением - все зависит именно от того, что вам нужно проверить.

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

Вы правы! Спасибо, Том. Тем не менее, когда я пытаюсь использовать 'expect (page) .to has_field (« Response », с:« Вы подписались на обновления »)« Я все еще получаю отказ от ожидания. Совпадений не было. – Bitwise

+0

@CameronBass Как я уже сказал в своем ответе - предполагается, что есть метка, связанная с текстовым полем (или любым типом поля) с текстом «Response» - если нет, вы можете использовать его id или имя и т. д. - или, если использовать Capybara 2.7+ pass nil и просто проверить значение –

+0

@CameronBass Если вы не можете понять, как правильно его назвать - добавьте HTML для этой области страницы на ваш вопрос –