gpt4 book ai didi

javascript - 如何使 EXPECT 条件等待 promise 得到解决(包装在方法中的代码)?

转载 作者:行者123 更新时间:2023-11-29 21:31:24 26 4
gpt4 key购买 nike

当我尝试在测试主体中使用以下代码时,它似乎工作正常,除了这个 block 之后(外部)的代码仍在执行并且测试最终失败。

var el = element(by.model('name.first'));
el.isDisplayed().then(function(condition) {
console.log("Is Element Displayed : " + condition);
if(!condition) {
fail('Test Failed');
}
});

但是当我将这段代码包装在一个方法中(在其他一些 util 文件中)时,例如:

isMyElementDisplayed: function (element) {
var el = element;
el.isDisplayed().then(function(condition) {
console.log("Is Element Displayed : " + condition);
return condition;
});
}

然后尝试在我的测试中调用此方法,例如:

expect(elementActions.isMyElementDisplayed(element(by.model('name.first')))).toBe(true);

失败并出现以下异常。

预期未定义为真。

但是我看到日志中打印了消息:是否显示元素:false

而且,在这种情况下,测试也不会在“预期”条件下停止,而是在最后失败。你可以看出我是 Protractor 和 javascript 的新手。我正在尝试自动化 QA 功能测试并构建一些可重复使用的方法,这些方法也可以被其他人再次使用。

  1. 有没有像我现在这样将代码包装在 util 方法中的正确方法?和

  2. 如何让 expect 条件等待 promise 被解决?

仅供引用:npm -version -> 2.14.7 和 protractor --version -> 3.0.0

最佳答案

@Artyom 指出的是将return 放入isMyElementDisplayed 函数中:

isMyElementDisplayed: function (element) {
var el = element;

// v HERE
return el.isDisplayed().then(function(condition) {
console.log("Is Element Displayed : " + condition);
return condition;
});
}

这样,isMyElementDisplayed 函数将返回一个将放在控制流上的 promise ,并且 expect 将在做出断言之前隐式解决它。


不过,我会使用等待来处理这个问题:

var EC = protractor.ExpectedConditions;

var elm = element(by.model('name.first'));
browser.wait(EC.visibilityOf(elm), 5000, "Element is still not visible");

expect(elm.isDisplayed()).toBe(true);

关于javascript - 如何使 EXPECT 条件等待 promise 得到解决(包装在方法中的代码)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36320015/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com