【发布时间】:2013-10-18 18:56:31
【问题描述】:
我正在使用Protractor 和Astrolabe 编写一些页面对象驱动的测试。
Jasmine 被用于实现 describe/it 样式规范。
使用this.addMatchers (TypeError: Object #<Object> has no method 'toContainLowered') 无法添加自定义匹配器,所以我使用this guide 来实现它们。
它似乎正在工作,直到我仔细查看我的测试运行的输出:
$> grunt test:func
Running "test:func" (test) task
Running "shell:protractor" (shell) task
Using the selenium server at http://localhost:4444/wd/hub
..
Finished in 6.727 seconds
2 tests, 1 assertion, 0 failures
这是我的代码:
var loginPage = require('./../pages/loginPage');
describe('Login page', function () {
var ptor = loginPage.driver;
beforeEach(function () {
jasmine.Matchers.prototype.toContainLowered = function (expected) {
return this.actual.toLowerCase().indexOf(expected) > -1;
};
loginPage.go();
ptor.waitForAngular();
});
it('should display login page', function () {
expect(loginPage.currentUrl).toEqual(ptor.baseUrl);
});
it('should display an error when the username or password is incorrect', function() {
loginPage.login('bad', 'credentials');
ptor.waitForAngular();
expect(loginPage.lblError.getText()).toContainLowered('invalid username and/or password');
// expect(loginPage.lblError.getText()).toContain('Invalid Username and/or Password');
});
});
如果我取消注释最后一行并删除 toContainLowered 匹配器,我会得到正确的输出:
2 tests, 2 assertions, 0 failures
我在调试这个基于 Promise 的代码时遇到了很大的困难,任何放置 console.log(this.actual.toLowerCase().indexOf(expected) > -1); 的努力都会打印出 false,这令人困惑。
我什至尝试用return false; 替换整个函数定义。仍然没有做任何事情。最后,我尝试不向匹配器传递任何参数,这应该会引发 Invalid Argument Error 之类的。
在使用 Protractor/Astrolabe 测试时,如何在 Jasmine 中定义自己的匹配器?
【问题讨论】:
标签: jasmine pageobjects matcher protractor astrolabe