我正在寫使用Protractor和Astrolabe一些網頁對象驅動測試不能斷言。自定義匹配在星盤/量角器+茉莉測試
茉莉花被用來實現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
我有一個非常困難的時候,d ebugging這個基於承諾的代碼,任何努力,將console.log(this.actual.toLowerCase().indexOf(expected) > -1);
將打印false
,這是混亂。
我甚至試過只return false;
替換整個函數定義。哪些仍然沒有做任何事情。最後,我嘗試傳遞沒有參數給匹配器,它應該拋出一個無效參數錯誤或什麼的。
用量角器/星盤測試時,如何界定茉莉花我自己的匹配?
此外,['.not'問題已修復](https://github.com/angular/protractor/commit/137d8040778215fd841654d3ca465b71f8719ea5)。不匹配者現在應該工作。 – Droogans