2015-11-11 3 views
0

Я использую самоцветов bootstrap-datepicker-rails для своего приложения и создали форму, в которой пользователи могут выбрать дату начала и дату окончания.Тестирование дампинг-гема с Rspec

Когда пользователь редактирует форму, я хочу, чтобы они могли видеть даты, которые они ранее выбрали. (например, Начало: 31 октября 2015 г., Окончание: 15 ноября 2015 г.).

Я пытаюсь написать тест, чтобы убедиться, что мое приложение это делает, но я застрял в синтаксисе.

user_updates_project_spec.rb

require "rails_helper" 

feature "User updates project" do 
    before (:each) do 
     @user = create(:user) 
     login_as(@user, scope: :user) 
     @project = create(:project, creator: @user, 
        name: "Building a robot", 
        start_at: "2015-10-31", 
        end_at: "2015-11-15",) 
    end 

    scenario "and sees correct dates on form" do 
    visit edit_user_project_path(@user, @project) 

    expect(".datepicker").to have_content("October 31, 2015") 
    end 
end 

Ошибки я получаю:

Failure/Error: expect(".datepicker").to have_content("October 31, 2015") 
    expected to find text "October 31, 2015" in ".datepicker" 

Это то, что моя форма выглядит следующим образом:

<div class="col-sm-6 pl0"> 
    <%= f.input :start_at, label: "Start Date", as: :string, 
        input_html: {value:@project.set_start_date_for_form.to_s(:long), 
        class: "datepicker start-date"} %> 
</div> 
<div class="col-sm-6 pr0"> 
    <%= f.input :end_at, label: "End Date", as: :string, 
        input_html: {value: @project.set_end_date_for_form.to_s(:long), 
        class: "datepicker end-date"} %> 
</div> 

Любые идеи о том, почему это не так за работой?

ответ

0

Как вы написали свои ожидания, то, что вы действительно говорите, ожидает, что строка «.datepicker» будет содержать контент «31 октября 2015 года», который никогда не будет правдой. ожидать, что нужно взять элемент, с которым может выполняться совпадение has_content, а не строка. Вы можете переписать его, как этот

expect(page.find(:css, '.datepicker.start-date')).to have_content("October 31, 2015") 

хотя лучший метод, вероятно, будет использовать

expect(page).to have_css('.datepicker', text: 'October 31, 2015) 

так, что будет соответствовать, если содержание меняется или загружается через AJAX. Еще одна вещь, которую следует учитывать, заключается в том, что, поскольку вы используете виджет datepicker, вам действительно нужно посмотреть на html, который создается JS в реальном браузере, вместо html в вашем tempalte view, чтобы точно определить, какой элемент вам нужно проверить содержимое внутри.

+0

Вы были правы, я не проверял правильный элемент. Что закончилось: ожидать (страница) .to have_css ("# project_start_at [значение = '31 октября 2015 года]") ожидать (страница) .to have_css ("# project_end_at [value =' 15 ноября , 2015 '] ") –

+0

Хорошо - поскольку вы проверяете атрибуты значения для двух элементов, я собираюсь предположить, что они являются полями ввода некоторого типа - в этом случае вы также можете использовать expect (page).to_all ('project_start_at', с: '31 октября 2015'), который обеспечивает немного лучшее чтение и несколько других функций. –

0

Я предполагаю, что может быть запутанным для .start-date и .end-date также можно использовать .text атрибут, чтобы проверить их:

expect(page.find(:css, '.datepicker.start-date').text).to eq('October 31, 2015') 
expect(page.find(:css, '.datepicker.end-date').text).to eq('November 15, 2015') 

Если это не удается, вы можете напечатать значение для его отладки:

puts page.find(:css, '.datepicker.start-date').text 
+0

Это почти сработало. Теперь я получаю следующую ошибку: Пользователь обновляет проект и видит правильные даты в форме Неудача/Ошибка: ожидать (page.find (: css, '.datepicker.start-date'). Text) .to eq ('31 октября , 2015') ожидается: "31 октября 2015" получил: "" (по сравнению с использованием ==) Похоже, он не обнаруживает значение входного сигнала. Когда я нахожусь на странице редактирования, все работает так, как должно. Я просто не могу это проверить. –

0

Оказывается, я не проверял правильность элемента при тестировании.

Что решил это было:

expect(page).to have_css("#project_start_at[value='October 31, 2015']") 
expect(page).to have_css("#project_end_at[value='November 15, 2015']") 

Элемент идентификаторы, которые Datepicker набор были project_start_at и project_end_at.

Смежные вопросы