让两个部分都有望解决承诺

时间:2016-07-21 18:46:24

标签: javascript testing jasmine promise protractor

问题:

在量角器中,expect()被修补以隐含地理解启用速记断言样式的承诺。 E.g:

expect(elm.getText()).toEqual("expected text");

elm.getText()此处不需要使用then()显式解析,并且会在检查期望之前由Protractor隐式解析。

但是,如果"等于"部分也是一种承诺。例如,来自另一个元素的文本。在这种情况下,我们必须明确解决第二部分:

elm2.getText().then(function (text2) {
    expect(elm1.getText()).toEqual(text2);
});

问题:

是否有可能修补Jasmine / Protractor以使其理解断言双方的承诺?能够写:

expect(elm1.getText()).toEqual(elm2.getText());

2 个答案:

答案 0 :(得分:1)

刚刚对双方的承诺进行了测试 - 它可以解决它们。 试试你的项目。也许你无事可做:

describe('ololo', function () {

it('both sides are promises', function () {
    browser.get('http://www.protractortest.org/testapp/ng1/#/form');

    let elementText1 = $('.ng-scope p').getText();

    let elementText2 = $('#transformedtext>h4').getText();

    //Will fail here, but you can see that it successfully resolved promises
    expect(elementText1).toEqual(elementText2);
});

});

如果这对您不起作用 - 我认为您可以使用protractor.promise.all,只是示例:

protractor.promise.all([elm2.getText(), elm1.getText()])
        .then(texts=> expect(texts[0]).toEqual(texts[1]), 'texts should be same')

或者更难的方式 - 创建自己的匹配器。看看我如何在我的lib中使用matcher中的promises: https://github.com/Xotabu4/jasmine-protractor-matchers/blob/master/index.js#L39

答案 1 :(得分:0)

不漂亮,但你可以解决这个问题。这是非承诺的无操作......

expect(elm1.getText()).toEqual(Promise.resolve(elm2.getText()));