Този тест на Capybara ще се разпадне ли?

Когато използвам capybara-webkit или poltergeist за тестване на поведението на JavaScript, често намирам (или за съжаление пиша) тестове, които изглеждат така

it "saves the check box value when clicked", js: true do
  visit '/somewhere'

  page.should have_unchecked_field 'cool_check_box'

  page.check 'cool_check_box'

  visit '/somewhere'

  page.should have_checked_field 'cool_check_box'
end

... където поставянето на отметка в квадратчето прави някаква AJAX заявка, която запазва каквото и да е състояние, което позволява да бъде проверено след бързо презареждане.

Този тест изглежда гарантирано неуспешен, защото ако AJAX заявката не завърши до момента, в който се случи второто visit '/somewhere', тя ще се зареди с квадратчето за отметка в грешно състояние.

За щастие на тази страница има и спинер, който се върти, докато заявката за отметка се изпълнява, така че мога да променя теста така

it "saves the check box value when clicked", js: true do
  visit '/somewhere'

  page.should have_unchecked_field 'cool_check_box'

  page.check 'cool_check_box'

  # Wait for checkbox ajax to complete
  page.should have_css('.spinner:not(.active)')

  visit '/somewhere'

  page.should have_checked_field 'cool_check_box'
end

Все още съм малко параноичен обаче: ако редът page.check се изпълняваше, но не успя да настрои въртящия се active преди реда page.should have_css, този ред щеше да успее, преди заявката дори да започне.

Като се има предвид, че JavaScript, задействан от квадратчето за отметка, задава класа active, мога ли да гарантирам, че този тест никога няма да се отклони?


person tjgrathwell    schedule 27.06.2013    source източник


Отговори (1)


Това, за което говорите, е рискът кодът, който обработва събитието за проверка, да се изпълнява едновременно с кода, който проверява за .spinner:not(.active). Това не е риск, тъй като Javascript на страницата е еднонишков - можете да гарантирате, че проверката дори ще бъде обработена първа.

person jonleighton    schedule 27.06.2013