6

这是失败的测试:

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();
    });
});

页面对象MyPage在哪里:

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;

errors应该是一组可见的错误文本在页面上找到

这是我们得到的错误:

Failures:

  1) Checking errors should not show any errors
   Message:
     Expected [  ] to be empty array.
   Stacktrace:
     Error: Failed expectation

仅供参考,toBeEmptyArray()matcher 来自jasmine-matchers第三方。


我试图打印出scope.page.errors这种方式的价值:

scope.page.errors.then(function (errors) {
    console.log(errors);
});

并打印为[]. Array.isArray(errors)返回true

从我所见,scope.page.errors是一个空数组,但期望失败。我错过了什么?

4

2 回答 2

3

答案是量角器 src中的四行。

ElementArrayFinder extends Promise,而 jasmine- matchers首先检查错误是否是一个实际数组,而Array.isArray 是如何完成的,这将返回 false;

这也与expect(scope.page.errors.length).toBe(0)未定义一致,因为 Promise 没有长度。

只需errors.then按照您的承诺运行,并测试参数是否为 [] 您还表明可以在运行时完成scope.page.errors.then

于 2015-04-08T07:14:18.447 回答
0
Inside test script your code line "scope.page = new MyPage();" is creating new empty MyPage object.Code which you have written in application script is creating page object locally and its not bounded with any angular scope.When there is requirement of testing such objects you need to replicate code for page object creation in beforeEach(); block of test script.And test it.
 describe("Checking errors", function () {
    var scope = {};
     var MyPage ;
    beforeEach(function () {
        browser.get("/#endpoint");
        browser.waitForAngular();

       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();
        });
};
    });

    it("should not show any errors", function () {
        expect(MyPage.errors).toBeEmptyArray();
    });
});
于 2015-04-08T07:29:28.023 回答