Можно ли разрешить и просмотреть результат обещания при отладке теста в Protactor?

Я пытаюсь отлаживать тест в стеке CucumberJS/Protractor/Chai-as-promised.

var tableDataRows = $('.example-table-under-test').$$('tr');
var dataToTest = tableDataRows.map(function(rows, index) {
  if (index > 0) {
    var cells = rows.$$('td');
    return {
      'ATTRIBUTE A': cells.first().getText(),
      'ATTRIBUTE B': cells.get(1).getText(),
      'ATTRIBUTE C': cells.get(2).getText(),
      'ATTRIBUTE D': cells.get(3).getText(),
      'ATTRIBUTE E': cells.get(4).getText(),
      'ATTRIBUTE F': cells.get(5).getText()
    };
  }
});
return chai.expect(dataToTest).to.eventually.deeply.equal(tableSpec.hashes());

Когда я запустил тест, я получил следующее сообщение об ошибке, несмотря на то, что характеристики огурца совпадают со значениями таблицы на экране:

AssertionError: expected [ Array(8) ] to deeply equal [ Array(7) ]

Я подумал, что поскольку картограф игнорирует первую строку из th элементов, 7 должно равняться 7, поэтому я хотел отладить тест. Сначала я попытался просто добавить then к map как tableDataRows.map(...).then(console.error) (поскольку .map от транспортира element.all/$$ возвращает обещание) для вывода данных, сопоставленных с tableDataRows, но это не привело к каким-либо данным.

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

.then(function() {
  console.error("I executed");
  // this didn't work either
});

После этого я попытался поместить строку журнала в функцию карты прямо над возвратом, так как это, казалось, разрешалось, и это сработало - 7 раз (я ожидал, что картограф пропустит строку заголовка, но это сбивает с толку, потому что тест утверждает, что в массиве 8 элементов. Во всяком случае..)

Таким образом, каким-то образом .to.eventually в chai-as-promised разрешает обещания (как сказано в документации), но я не вижу, как моя .then() после функции .map() ничего не разрешает, или как любая из моих других попыток не разрешала обещание либо.

Можно ли разрешить обещание, не возвращая обещание chai.expect (предположительное), которое обертывает обещание, используемое для получения данных для ожидания? -- Я также заметил, что ничего не разрешится, если у меня просто будет chai.expect(...).to.eventually.equal(...) без предшествующего возврата.


person anjunatl    schedule 18.04.2017    source источник


Ответы (1)


В итоге коллега указал мне правильное направление в этом вопросе. Одной из моих первых попыток был ответ — добавление .then к цепочке .map, но когда я проверял это, я не возвращал chai.expect() всего этого. Поместив его туда и вернув, все обещания были решены, и я получил результат, который искал.

var tableDataRows = $('.example-table-under-test').$$('tr');
var dataToTest = tableDataRows.map(function(rows, index) {
  if (index > 0) {
    var cells = rows.$$('td');
    return {
      'ATTRIBUTE A': cells.first().getText(),
      'ATTRIBUTE B': cells.get(1).getText(),
      'ATTRIBUTE C': cells.get(2).getText(),
      'ATTRIBUTE D': cells.get(3).getText(),
      'ATTRIBUTE E': cells.get(4).getText(),
      'ATTRIBUTE F': cells.get(5).getText()
    };
  }
}).then(function(resolvedMap) {
  console.error(resolvedMap);
});
return chai.expect(dataToTest).to.eventually.deeply.equal(tableSpec.hashes());
person anjunatl    schedule 20.04.2017