问题:
在量角器中,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());
答案 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()));