2013-10-02 19 views
3

我的情況是名單如下 - 我有一個簡單的頁面,其中列出了可用的產品:角端對端測試,以檢查元素

<ul class="products ng-scope" id="products"> 
    <!-- ngRepeat: tag in products --> 
    <li ng-repeat="product in products" class="ng-scope"> 
    <a ng-href="/#/viewProduct/1" class="ng-binding" href="/#/viewProduct/1">Product A</a> 
    </li><li ng-repeat="product in products" class="ng-scope"> 
    <a ng-href="/#/viewProduct/2" class="ng-binding" href="/#/viewProduct/2">Product B</a> 
    </li><li ng-repeat="product in products" class="ng-scope"> 
    <a ng-href="/#/viewProduct/3" class="ng-binding" href="/#/viewProduct/3">Product C</a> 
    </li><li ng-repeat="product in products" class="ng-scope"> 
    <a ng-href="/#/viewProduct/4" class="ng-binding" href="/#/viewProduct/4">Product D</a> 
    </li><li ng-repeat="product in products" class="ng-scope"> 
    <a ng-href="/#/viewProduct/5" class="ng-binding" href="/#/viewProduct/5">Product E</a> 
    </li> 
</ul> 

在我的角度情況下我希望測試的產品清單等於達到預期。我知道它可以/應該是一個單元測試,但假設我想要一個e2e測試。

'use strict'; 

describe('my app', function() { 
    var productsList = [ 
    'Product A', 
    'Product B', 
    'Product C', 
    'Product D', 
    'Product E' 
    ]; 

    it('should list all products', function() { 
    browser().navigateTo('/#/products'); 
    var foundProducts = element('#products li').query(function(elements, done) { 
     var productsArray = []; 
     elements.each(function(index) { 
     productsArray.push(elements[index].innerText); 
     }); 

     done(null, productsArray); 
    }); 

    expect(foundProducts).toEqual(productsList); 
    }); 
}); 

誰能告訴我這可怎麼是:和調試角度代碼,我設法寫下面的測試 -

閱讀官方文檔(其中像往常一樣覆蓋對象的10%http://docs.angularjs.org/guide/dev_guide.e2e-testing)後做得更輕鬆?

第二個問題,爲什麼elements [index] .text()是未定義的 - 實際上這是一個如何從元素[index]中噴出jQuery對象的問題。

回答

4

實測值的solutution:

describe('my app', function() { 
    var productsList = [ 
    ['Product A'], 
    ['Product B'], 
    ['Product C'], 
    ['Product D'], 
    ['Product E'] 
    ]; 

    it('should list all products', function() { 
    browser().navigateTo('/#/products'); 

    expect(repeater('#products li').count()).toEqual(productsList.length); 

    for (var i = 0; i < productsList.length; i++) { 
     expect(repeater('#products li').row(i)).toEqual(productsList[i]); 
    } 

    }); 
});