hasAttribute в DOM не работает должным образом - PullRequest
0 голосов
/ 28 июня 2018

У меня есть эта форма в файле tect.html, и я хочу проверить, отключена кнопка или нет:

<button id="ref_button"....[disabled]="editForm.form.invalid || isSaving" class="btn btn-primary">

Я использую транспортир, огурец и чай, чтобы проверить, отключена ли эта кнопка, когда данные формы недействительны, поэтому я проверяю ее атрибут отключенным, как это:

  JSDOM.fromFile("file.html").then(dom => {
   dom.window.document.getElementById("ref_button").has.attr('disabled').should.be.true;
     
    });
  });

Теперь тест не пройден, потому что он всегда находит атрибут отключенным, когда кнопка отключена или нет, когда данные действительны или нет.

Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 28 июня 2018

Для angularJs, вы должны использовать директиву ng-disabled в вашем html

из официальной документации :

Специальная директива необходима, потому что мы не можем использовать интерполяцию внутри отключенного атрибута. Смотрите руководство по интерполяции для получения дополнительной информации. Информация.

0 голосов
/ 28 июня 2018

Я думаю, что атрибут [disabled] НЕ существует в элементе кнопки (поэтому он всегда верен). Это атрибут disabled, который вы должны искать (без [ и ] разметки. Это синтаксис привязки.

Так что, думая об этом, это должно сработать: (не проверял ...)

dom.window.document.getElementById("ref_button").should.not.have.attr("disabled");

Но, вероятно, это всегда будет выводить false, поскольку кнопка имеет этот атрибут. Чтобы это работало последовательно, вы должны взять значение атрибута disabled и проверить, истинно ли оно.

dom.window.document.getElementById("ref_button").getAttribute("disabled").toBeTruethy().

На самом деле я не знаю, существует ли toBeTruethy() в chai, но я хочу сказать, что вы должны проверять значение атрибута, а не только если атрибут вообще существует.

Еще одна вещь, которую стоит упомянуть, это:

element(by.css("*[id='field_nombre']")).click();
element(by.css("*[id='field_nombre']")).sendKeys('').then(callback);

Полагаю, click() также является асинхронной функцией, и в приведенном выше примере ключи отправляются до того, как click() завершит свое выполнение. Это было бы правильно, я думаю:

element(by.css("*[id='field_nombre']")).click().then(function() {
  element(by.css("*[id='field_nombre']")).sendKeys('').then(callback);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...