ale*_*cxe 6 javascript testing jasmine protractor jasmine-matchers
这是失败的测试:
describe("Checking errors", function () {
var scope = {};
beforeEach(function () {
browser.get("/#endpoint");
browser.waitForAngular();
scope.page = new MyPage();
});
it("should not show any errors", function () {
expect(scope.page.errors).toBeEmptyArray();
});
});
Run Code Online (Sandbox Code Playgroud)
这里MyPage是一个Page对象:
var MyPage = function () {
this.errors = element.all(by.css("div.error-block b.error"))
.filter(function (elm) {
return elm.isDisplayed().then(function (value) {
return value;
});
})
.map(function (elm) {
return elm.getText();
});
};
module.exports = MyPage;
Run Code Online (Sandbox Code Playgroud)
这里errors应该是可见的错误文本的阵列在网页上找到.
这是我们得到的错误:
Failures:
1) Checking errors should not show any errors
Message:
Expected [ ] to be empty array.
Stacktrace:
Error: Failed expectation
Run Code Online (Sandbox Code Playgroud)
仅供参考,toBeEmptyArray()匹配器来自jasmine-matchers第三方.
我试图打印出scope.page.errors这种方式的价值:
scope.page.errors.then(function (errors) {
console.log(errors);
});
Run Code Online (Sandbox Code Playgroud)
并打印出来[].Array.isArray(errors)回报true.
从我看来,scope.page.errors是一个空数组,但期望失败.我错过了什么?
小智 3
答案是量角器 src中的四行。
ElementArrayFinder extends Promise,而 jasmine-matchers 检查首先检查错误是否是一个实际的数组,以及Array.isArray 是如何完成的,这将返回 false;
这也与expect(scope.page.errors.length).toBe(0)未定义一致,因为承诺没有长度。
只需运行errors.then你的诺言,并测试参数是否为 [] 你还表明,当你运行时可以完成scope.page.errors.then
| 归档时间: |
|
| 查看次数: |
2162 次 |
| 最近记录: |