2014-03-24 118 views
1

我想測試嚴重依賴API的Angular應用程序。該API正在與phpunit單獨測試,我們正在創建燈具,所以我希望不必在Angular中創建另一套模擬燈具。我現在只使用了鉻合金驅動器的量角器。AngularJS e2e使用量角器和遠程API測試

首先,我必須通過不是Angular應用程序的頁面登錄。

然後我去一個網頁,顯示了ng-if='loadingCards'裝載機和隱藏的表ng-if='!loadingCards',然後在API調用來檢索卡完成後,中loadingCards值翻轉。

下面是測試規範的開始,它會讓您通過非角度登錄,然後將您帶到卡片列表頁面。我想要做的就是看cards $ scope變量的內容,看看API確實返回了一些東西,但我總是得到一個空數組。

describe('User cards page', function() { 
    var driver; 
    var ptor; 

    beforeEach(function() { 
    ptor = protractor.getInstance(); 
    ptor.ignoreSynchronization = true; 
    browser.ignoreSynchronization = true; 
    driver = ptor.driver; 
    }); 

    it('should login', function() { 
    driver.get('http://local.local.com/login'); 
    driver.findElement(protractor.By.name('_username')).sendKeys('admin'); 
    driver.findElement(protractor.By.name('_password')).sendKeys('admin'); 
    driver.findElement(protractor.By.css('input[type="submit"]')).click(); 
    }); 

    it('should list cards', function() { 
    browser.get('http://local.local.com/cms/cards'); 

    var ucards = element.all(by.repeater('card in cards')).then(function(cards) { 
     console.log(cards); 
    }); 
    //expect(ucards.count()).toEqual(3); 
    }); 
}); 
+0

什麼給手動,視覺檢查? – bdavidxyz

+0

@ davidb583我不明白你的意見。 –

回答

0

我認爲你在混合兩件事。 你可以寫:

element.all(by.repeater('card in cards')).then(function(cards) { 
    console.log(cards); 
}); 

或:

var ucards = element.all(by.repeater('card in cards')); 
ucards.then(function(cards) { 
    console.log(cards); 
}); 

,但你正在種...兩者。

你有什麼錯誤嗎?你能檢查你的當前網址嗎?

expect(browser.getCurrentUrl()).toEqual('http://local.local.com/cms/cards'); 

問候!

+0

感謝您的回覆@nilsK。我不認爲我在中繼器上得到承諾的方式是不正確的,但你說得對,我可以把它寫得更清潔,更容易閱讀。請參閱我對上面沃爾特斯的回答的評論。這是我添加一個S卡在網址應該是卡。 –

+0

啊,好的,太棒了......真的,這個語法起作用了嗎?我確信這在我的測試中拋出了一個錯誤...... mhh;)問候 – nilsK

0

也許它()在登錄發生的地方,跟着它()你在哪裏檢查卡的數量。我會建議將登錄部分移至beforeEach。

如果這不起作用,也許一個ptor.sleep(300)可以幫助。放置在頁面的browser.get()的正下方。 api可能沒有返回值。

+0

謝謝你的迴應沃爾特......我嘗試了你的兩個建議都無濟於事。如果你知道未來,我不想將登錄信息放在beforeEach上,因爲一旦我登錄了一次,我就有了一個會話,我不需要返回。我嘗試了睡眠,但是這也沒有改變任何事情。儘管如此,它確實導致我將超時設置爲一分鐘,所以我可以看看控制檯,並看到我使用了錯誤的URL,但我認爲我正在捕捉,但沒有。謝謝你把我推向正確的道路! –

0

Walter幫助我通過使用sleep命令來調試此操作,以使chromedriver iwndow更長時間打開,以便我可以看到我使用的URL不正確。一個更多的測試來創建。關閉這個。

+0

我也使用sleep命令進行這種調試。將其設置爲一分鐘,以便您有機會查看正在製作的api調用。我仍然建議在beforeEach進行登錄,因爲這是爲測試做好必要準備的適當位置。如果您已經登錄,那麼在那裏檢測,因此登錄只發生一次。無論如何,很高興我能幫上忙! –

+0

我正在做另一個文件中的登錄,我確保在我的protractor.conf文件中首先運行。在每次測試之前,它真的減緩了登錄速度。無論如何,調試技術是無價的。 –

+0

這聽起來像是一個更好的解決方案。 –