ale*_*cxe 12 javascript testing promise jasmine protractor
我的一个测试期望错误消息文本是多个值之一.由于getText()返回承诺我不能使用toContain()茉莉花匹配器.以下情况不起作用,因为protractor(jasminewd引擎盖下)不能解析匹配器第二部分中的承诺,toContain()在这种情况下:
expect(["Unknown Error", "Connection Error"]).toContain(page.errorMessage.getText());
Run Code Online (Sandbox Code Playgroud)
问题:有没有办法检查元素是否在带有jasmine +量角器的数组中,其中元素是一个promise?
换句话说,我正在寻找倒数,toContain()以便expect()隐含地解决传入的承诺.
作为一种解决方法,我可以通过以下方式明确解决承诺then():
page.errorMessage.getText().then(function (text) {
expect(["Unknown Error", "Connection Error"]).toContain(text);
});
Run Code Online (Sandbox Code Playgroud)
我不确定这是不是最好的选择.我也可以使用基于第三方的解决方案jasmine-matchers.
例如,Python中存在这种断言:
self.assertIn(1, [1, 2, 3, 4])
Run Code Online (Sandbox Code Playgroud)
Del*_*kin 14
看起来你需要一个自定义匹配器.根据您使用的Jasmine版本:
使用Jasmine 1:
this.addMatchers({
toBeIn: function(expected) {
var possibilities = Array.isArray(expected) ? expected : [expected];
return possibilities.indexOf(this.actual) > -1;
}
});
Run Code Online (Sandbox Code Playgroud)
使用Jasmine 2:
this.addMatchers({
toBeIn: function(util, customEqualityTesters) {
return {
compare: function(actual, expected) {
var possibilities = Array.isArray(expected) ? expected : [expected];
var passed = possibilities.indexOf(actual) > -1;
return {
pass: passed,
message: 'Expected [' + possibilities.join(', ') + ']' + (passed ? ' not' : '') + ' to contain ' + actual
};
}
};
}
});
Run Code Online (Sandbox Code Playgroud)
您必须在将要使用的beforeEach每个describe块的部分中执行此操作.
您的期望看起来像:
expect(page.errorMessage.getText()).toBeIn(["Unknown Error", "Connection Error"]);
Run Code Online (Sandbox Code Playgroud)
另一种解决方案是使用.toMatch()带有正则表达式的匹配器,特别是一个特殊字符|(称为"或"),它只允许匹配一个条目:
expect(page.errorMessage.getText()).toMatch(/Unknown Error|Connection Error/);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3276 次 |
| 最近记录: |