Javascript 如何使EXPECT条件等待promise被解析(代码包装在方法中)?

Javascript 如何使EXPECT条件等待promise被解析(代码包装在方法中)?,javascript,node.js,jasmine,protractor,Javascript,Node.js,Jasmine,Protractor,当我尝试在测试体中使用下面的代码时,它似乎工作得很好,除了这个块之后(外部)的代码仍在执行,并且测试最终失败 var el = element(by.model('name.first')); el.isDisplayed().then(function(condition) { console.log("Is Element Displayed : " + condition); if(!condition) { fail('Te

当我尝试在测试体中使用下面的代码时,它似乎工作得很好,除了这个块之后(外部)的代码仍在执行,并且测试最终失败

var el = element(by.model('name.first'));
    el.isDisplayed().then(function(condition) {
        console.log("Is Element Displayed : " + condition);
        if(!condition) {
            fail('Test Failed');
        }
    });
但是,当我将此代码包装到一个方法(在其他一些util文件中)中时,如下所示:

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

expect(elementActions.isMyElementDisplayed(element(by.model('name.first')))).toBe(true);
它失败了,但出现以下异常

预期未定义为true。

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

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

  • 有没有一种正确的方法可以像我现在这样将代码包装到util方法中?及

  • 如何使期望条件等待承诺得到解决


  • 仅供参考:npm-版本->2.14.7和量角器-版本->3.0.0

    @Artyom指出的是将
    返回
    放入
    isMyElementDisplayed
    功能:

    isMyElementDisplayed: function (element) {
        var el = element;
    
        // v HERE
        return el.isDisplayed().then(function(condition) {
            console.log("Is Element Displayed : " + condition);
            return condition;
        });
    }
    
    这样,
    isMylementDisplayed
    函数将返回一个承诺,该承诺将放在控制流上,
    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);
    

    您需要从
    isMyElementDisplayed
    first@ArtyomNeustroev在这种情况下,你能指导怎么做吗。那真的很有帮助。您也可以将其作为答案发布,如果这解决了我的问题,我将接受。我不确定,这是唯一的问题,因此我无法将其作为答案发布,但现在有一个:)
    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);