带有量角器的Jasmine自定义匹配器,用于检查浏览器标题

时间:2016-01-13 00:12:10

标签: javascript testing jasmine protractor end-to-end

我正在编写一个用于Protractor规范的Jasmine自定义匹配器,我想检查浏览器标题是否等于某个字符串。我无法使这段代码正常工作,并且在花了几个小时调试它之后,我只能假设browser对象没有像我期望的那样在匹配器函数内被访问。当我修改匹配器函数以接受browse.getTitle()作为实际参数时,它工作正常,这导致我的假设。谁能在这里找到问题并向我解释一下?

beforeEach(function() {
    jasmine.addMatchers({
        toBeOnPage: function(util, customEqualityTesters) {
            return {
                compare: function(actual, expected) {
                    var result = {};
                    result.pass = actual.getTitle() === expected.title;
                    return result;
                }
            };
        }
    });
});

var homepage = { url: 'Homepage URL', title: 'Homepage Title' };

describe('regression:', function() {
    it('homepage loads successfully', function() {
        browser.get('http://localhost/#/home');
        expect(browser).toBeOnPage(homepage);
    });
});

1 个答案:

答案 0 :(得分:2)

问题是getTitle() 会返回承诺。解决它:

beforeEach(function() {
    jasmine.addMatchers({
        toBeOnPage: function(util, customEqualityTesters) {
            return {
                compare: function(actual, expected) {
                    return {
                         pass: actual.getTitle().then(function (title) {
                              return title === expected.title;
                         });
                    };
                }
            };
        }
    });
});