4

在为Angular Scenario Runner编写 E2E 测试时,我遇到了一种query()方法:

element(selector, label).query(fn)

文档说:

执行函数 fn(selectedElements, done),其中 selectedElements 是与给定 jQuery 选择器匹配的元素,而 done 是在 fn 函数末尾调用的函数。标签用于测试输出。

所以我为我的html页面上的一组按钮写了一个it-case:

it('should display all buttons on page load', function () {
    var buttonText = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '0'];
    element('button', 'UI elements').query(function (selectedElements, done) {
        selectedElements.each(function (idx, elm) {
            expect(elm.innerText in buttonText).toEqual(true);
        });
        done();
    });
});

作为测试执行的结果,我收到了一个包含 10 个失败的期望子句的列表:

预期为真但未定义

中间调试表明elm.innerText in buttonText情况属实。

所以我的问题是,出了什么问题?是不是done()方法的错误使用?

4

2 回答 2

2

您不能在 element().query() 函数中调用 expect()。

但是您可以执行以下操作

var promise = element('SELECTOR').query(function(selectedElements, done) {
    // We are in JQuery land.
    if (selectedElements < 1) {
      done('ERROR MESSAGE')
    } else {
      done(null, selectedElements[0].innerText)
    }
    // For documentation only.
    // Don't return anything... just continue.
    done()
})
expect(promise).toEqual('i am waiting for you')

您可以将 promise 和 expect 组合成一个调用。

于 2013-06-19T18:01:07.810 回答
0

除了 'expect' 行之外,代码看起来是正确的:

expect(elm.innerText in buttonText).toEqual(true);

“期望”的参数是未来。从文档中,由于所有 API 语句都返回一个未来对象,因此elm.innerText返回一个未来,但elm.innerText in buttonText没有,导致未定义。也许,编码的方式是:

expect(elm.innerText).toMatch(/\d/);
于 2013-02-22T21:40:18.110 回答