【问题标题】:Assert a string contains a certain value (and fail the test if it doesn't)断言一个字符串包含某个值(如果没有,则测试失败)
【发布时间】:2019-05-08 23:57:47
【问题描述】:

作为我的 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)
      });
    });
  });
},

这样正确地列出了所有的元素值;

我现在想做的是检查结果中是否列出了 Nottingham,如果不是,则失败测试。

我安装了 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);
        }
      });
    });
  });
},

但这不起作用,因为我不断收到以下错误;

使用 assert 包是最好的测试方法,或者有更直接的方法来断言 Nottingham 包含在此列表中,并且测试 失败如果不是。

我尝试过使用resme.includes("Nottingham"),但这并没有通过测试。

任何帮助将不胜感激。

谢谢。

【问题讨论】:

    标签: assert nightwatch.js


    【解决方案1】:

    看起来最里面的函数(以 res 作为参数的函数)为每个项目调用,而 resme 是您当前正在迭代的项目,而不是数组,因此包含函数没有按预期工作。

    我不熟悉这个库,但我猜你必须这样做:

    "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)
    },
    

    你用一个 false 值初始化一个变量“found”,当你遍历每个值时,如果你找到它,就将它设置为 true。或者,您应该在该点中断迭代。当整个过程完成后,断言你找到了你想要的值。

    【讨论】:

      猜你喜欢
      • 2013-07-06
      • 2017-11-03
      • 2018-03-04
      • 1970-01-01
      • 1970-01-01
      • 2019-03-15
      • 2011-01-22
      • 2014-03-22
      • 1970-01-01
      相关资源
      最近更新 更多