当我们使用assert inside promise时,测试用例没有失败

时间:2018-03-22 06:07:25

标签: javascript protractor

以下是我的代码。无论我的实际是否等于预期或不等于测试用例,它只是显示警告消息,当它不相等但我的测试用例显示为绿色。我无法在报告中看到任何失败消息。

代码:

this.VerifyAccountHolder=async function(){
 var testPromise = new Promise(function(resolve, reject) {
    setTimeout(function() {
          resolve(elementAccount.isPresent());
    }, 200);

});
var result = await testPromise;
assert.equal(result,true,"wrong result");

警告讯息:

  

(node:8784)UnhandledPromiseRejectionWarning:未处理的承诺   rejection(拒绝id:1):AssertionError:期望false等于   true(节点:8784)[DEP0018]弃用警告:未处理的承诺   拒绝拒绝。在未来,承诺拒绝   未处理将以非零退出终止Nodejs进程   代码。

如何避免此警告

  

我想在报告中显示断言错误。我是JavaScript量角器框架的新手。

1 个答案:

答案 0 :(得分:0)

您可以通过完全删除承诺来简化整个功能。我真的不确定你为什么需要setTimeout。该元素将呈现或不存在。您可以将ExpectedConditions.presenceOf()browser.wait()一起使用,但这对我来说似乎是多余的。尽管我不想提出这个建议,如果你真的必须等待200ms才能检查元素是否存在,只需使用browser.sleep()。我会用它作为最后的手段。如果可以的话,尝试让它工作而不需要任何明确的等待。

this.VerifyAccountHolder = function() {
    browser.sleep(200); //only use this if you REALLY need it
    return elementAccount.isPresent();    
});

然后你应该将断言移到测试而不是将它保留在这个函数中。

it('should be present', async () => {
    let result = await pageObjectName.VerifyAccountHolder();
    expect(result).toEqual(true);

    //or if you prefer to keep using a node assertion instead
    //assert.equal(result,true,"element not present");
});