2013-10-18 73 views
2

我正在寫使用ProtractorAstrolabe一些網頁對象驅動測試不能斷言。自定義匹配在星盤/量角器+茉莉測試

茉莉花被用來實現describe/it格式的規格。

添加自定義的匹配將無法正常工作使用this.addMatchersTypeError: 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;替換整個函數定義。哪些仍然沒有做任何事情。最後,我嘗試傳遞沒有參數給匹配器,它應該拋出一個無效參數錯誤或什麼的。

用量角器/星盤測試時,如何界定茉莉花我自己的匹配?

回答

2

我已經受夠了的匹配類似的問題,特別是與。不能的匹配,而這一切似乎不起作用。我假設量角器擴展了茉莉花匹配器來處理這些承諾,並且該擴展未被應用於.not或自定義匹配器。

在我的情況,我想一個.not.toMatch,所以我只是寫這給了我我想要的東西,與未嵌入正則表達式一個令人費解的正則表達式。

我注意到,您的匹配被稱爲「toContainLowered」,所以也許你正在尋找小寫的,因此,你可以改爲做到這一點通過使用.toMatch正則表達式?

我在此提出量角器GitHub上的問題就在這裏:https://github.com/angular/protractor/issues/266

我也看到,在這個代碼文件:https://github.com/angular/protractor/blob/master/jasminewd/spec/adapterSpec.js,即最後提交的被標記爲「打補丁的匹配應該明白不。」這可能會爲您修復自定義匹配器,或者提供修復該自定義匹配器所需的操作的指示。

編輯:現在看更進一步的問題線程,我看到你已經在那裏。這使得我的答案有點多餘。 :-)

+0

此外,['.not'問題已修復](https://github.com/angular/protractor/commit/137d8040778215fd841654d3ca465b71f8719ea5)。不匹配者現在應該工作。 – Droogans