Проблема с написанием теста капибары/полтергейста для флажка "Отметить все"

Работая над панелью администратора для приложения, которое я создаю, я создал опцию «отметить все» флажками в определенном столбце. На моем локальном хосте он работает на 100% по назначению; но когда я вернулся, чтобы исправить свои интеграционные тесты, я столкнулся с множеством проблем, чтобы заставить его работать.

HTML:

<table class="table">
   <tr>
    <th>Account Name</th>
    <th>Status</th>
    <th>Email</th>
    <th>Approve</th>
    <th></th>
  </tr>
  <form accept-charset="UTF-8" action="/cpanel/client_actions" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="&#x2713;" /><input name="_method" type="hidden" value="put" /><input name="authenticity_token" type="hidden" value="IhSJHcXcODzyrboTsk1i8AZIw23XEIQdTCod/UKqNws=" /></div>

        <tr>
          <td>Test Account</td>
          <td>Email not sent</td>
          <td><input class="email-client" id="email-client1" name="send_emails[]" type="checkbox" value="1" /></td>
            <td><input class="approve-client" id="approve-client1" name="approve_clients[]" type="checkbox" value="1" /></td>
          <td><a href="/cpanel/account_infos/1/edit" html="{:class=&gt;&quot;btn btn-success&quot;}">Edit</a></td>
        </tr>

        <tr>
          <td>Test Account4</td>
          <td>Email not sent</td>
          <td><input class="email-client" id="email-client3" name="send_emails[]" type="checkbox" value="3" /></td>
            <td><input class="approve-client" id="approve-client3" name="approve_clients[]" type="checkbox" value="3" /></td>
          <td><a href="/cpanel/account_infos/3/edit" html="{:class=&gt;&quot;btn btn-success&quot;}">Edit</a></td>
        </tr>
  <tr>
    <td></td>
    <td></td>
    <td>
      <p><input id="email-all" name="email-all" type="checkbox" value="1" /></p>
      <p>Select/Deselect All</p>
    </td>
    <td>
      <input id="approve-all" name="approve-all" type="checkbox" value="1" />
      <p>Select/Deselect All</p>
    </td>
    <td><input name="commit" type="submit" value="Save changes" /></td>
  </tr>
</form></table>

Сценарий:

$(function() {
  $('#email-all').click(function() {
    if (this.checked) {
      $('input[type="checkbox"].email-client').each(function() {
        this.checked = true;
      });
    } else {
      $('input[type="checkbox"].email-client').each(function() {
        this.checked = false;
      });
    }
  });
  $('#approve-all').click(function() {
    if (this.checked) {
      $('input[type="checkbox"].approve-client').each(function() {
        this.checked = true;
      });
    } else {
      $('input[type="checkbox"].approve-client').each(function() {
        this.checked = false;
      });
    }
  });
});

И моя попытка пройти тест:

it "check all email box checks box for all records", :js => true, :focus => true do
  click_on "Approved"
  checkbox = find(:css, "#email-all")
  checkbox2 = find(:css, "#email-client#{client_approved.id}")
  checkbox.checked?.should == false
  check("email-all")
  checkbox.checked?.should == true
  checkbox2.checked?.should == true
  uncheck "email-all"
  checkbox.checked?.should == false
  checkbox2.checked?.should == false
end

Прямо сейчас тест не работает на checkbox2.checked?.should == true. Синтаксис, который я использую для этого теста, отличается от того, что я обычно использую, но это был единственный способ заставить его правильно проверять и снимать отметки. Я, конечно, не эксперт в тестировании подобных скриптов, но я не могу понять, что я делаю неправильно.

Какие-либо предложения? Спасибо!


person Conner Smith    schedule 13.12.2013    source источник


Ответы (2)


У меня была чертовски сложная настройка времени checked таким образом. Вы ознакомились с рекомендациями, подобными упомянутым здесь: http://api.jquery.com/prop/.

В основном this.checked = true не может надежно установить состояние «проверено» во всех браузерах. Я помню, в частности, у меня были большие проблемы с этим в IE7 и IE8.

person danpickett    schedule 16.12.2013
comment
Я разобрался - тест работал правильно! Я использовал ссылки на фильтры, которые отображались в ajax, поэтому, когда я переключил свой фильтр, написанный мной js больше не работал. Я также поменял фильтры в тесте. Таким образом, мне нужно было использовать $(document).on("click", "#email-all", function() вместо $('#email-all').click(function()... - person Conner Smith; 17.12.2013

Я разобрался - тест работал правильно! Я использовал ссылки на фильтры, которые отображали страницу в ajax, поэтому, когда я переключил свой фильтр, написанный мной js больше не работал. Я также поменял фильтры в тесте. Таким образом, мне нужно было использовать $(document).on("click", "#email-all", function() вместо $('#email-all').click(function()

person Conner Smith    schedule 16.12.2013