Утвердить строку содержит определенное значение (и провалить тест, если это не так) - PullRequest
0 голосов
/ 08 мая 2019

Как часть моего nightwatch.js тестирования, у меня есть следующий код, который перечислит все значения элемента (в данном случае, список городов Великобритании);

"Page 2 Location SEO Crawl paths are displayed": function (browser) {
  browser.elements('xpath', '//a[contains(@href,"location")]', function (results) {
    results.value.map(function(element) {
      browser.elementIdAttribute(element.ELEMENT, 'innerText', function(res) {
        var resme = res.value;
          console.log(resme)
      });
    });
  });
},

Это правильно перечисляет все значения элементов, как таковые;

enter image description here

Что я сейчас хотел бы сделать, это проверить, что Ноттингем указан в результате, а Fail - тест, если это не так.

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

"Page 2 Location SEO Crawl paths are displayed": function (browser) {
  browser.elements('xpath', '//a[contains(@href,"location")]', function (results) {
    results.value.map(function(element) {
      browser.elementIdAttribute(element.ELEMENT, 'innerText', function(res) {
        var resme = res.value;
        console.log(resme);
          if (resme.includes("Nottingham")) {
            assert.ok(true);
          }
          else {
            assert.ok(false);
        }
      });
    });
  });
},

, но это не сработало, поскольку я продолжал получать следующую ошибку:

enter image description here

Isиспользование assert - лучший способ проверить это, или есть более простой способ утверждать, что Nottingham включен в этот список, а тесты не пройдены если это не так.

Я пытался использовать resme.includes("Nottingham"), но это не провал теста.

Любая помощь будет принята с благодарностью.

Спасибо.

1 Ответ

0 голосов
/ 08 мая 2019

Похоже, что самая внутренняя функция (та, которая имеет res в качестве параметра) вызывается для каждого элемента, а resme - это элемент, который вы сейчас перебираете, а не массив, поэтому функция include работает не так, как ожидалось.

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

"Page 2 Location SEO Crawl paths are displayed": function (browser) {
  var found = false;
  browser.elements('xpath', '//a[contains(@href,"location")]', function (results) {
    results.value.map(function(element) {
      browser.elementIdAttribute(element.ELEMENT, 'innerText', function(res) {
        var resme = res.value;
        console.log(resme);
        if (resme === "Nottingham") {
          found = true;
          // Maybe return something like null or 0 to stop iterating (would depend on your library).
        }
      });
    });
  });
  assert.ok(found)
},

Вы инициируете переменную "found" с ложным значением, и когда вы повторяетекаждое значение, которое вы устанавливаете в true, если вы его найдете.При желании вы должны прервать итерацию в этой точке.Когда весь процесс будет завершен, подтвердите, что вы нашли желаемое значение.

...