私は現在、控え目なAngularアプリを分度器で使用するためのe2eテストをいくつか書いています。
私のアプリは正常に動作し、単体テストはすべて合格し、e2eも使用されています...これまでは次のとおりです。
appE2ESpec.js
_describe('adding an item', function() {
var items,
addItemButton,
startCount;
beforeEach(function() {
items = element.all(by.css('li.item'));
addItemButton = element(by.id('addItemButton'));
startCount = items.count();
});
it('should display a new item in list', function() {
addItemButton.click();
expect(items.count()).toEqual(startCount+1);
});
});
_
これは私が私のテストを書いた方法ですが、
問題は: that items.count()がpromiseを返す、私はそれを知っているが、どうにかして分度器に強制的に解決させます。だから私はこれを手に入れます:
_Failures:
1) myApp adding an item should display a new item in list
Message:
Expected 6 to equal '[object Object]1'.
_
私が試したこと:
_items.count().then(function(count) {
startCount = count;
//console.log(startCount) --> "6" Perfect!
});
_
しかし、最後に同じ結果を得ました... expect
をthen
に入れることができません。私もそれについて考えました。
付録:
console.log(startCount)
はこれを出力します:
_{ then: [Function: then],
cancel: [Function: cancel],
isPending: [Function: isPending] }
_
.toEqual(6)
と書くこともできましたが、アプリの起動状態を変更する必要があるたびにテストを書き直したくありません。
何か案が?前もって感謝します!!
約束を解決してから、アサーションを実行する必要があります。
分度器は、expect()に渡したプロミスを解決しますが、プロミスに数値を追加することはできません。最初にpromiseの値を解決する必要があります。
beforeEach(function() {
...
items.count().then(function(originalCount) {
startCount = originalCount;
});
});
it('should display a new item in list', function() {
...
expect(items.count()).toEqual(startCount+1);
});
アサーションにchai
を使用している間、chai-as-promised
これにより、promiseをより読みやすい方法で処理できます。それを機能させるには、最初に宣言する必要があります:
var chai = require('chai');
var chaiAsPromised = require('chai-as-promised');
chai.use(chaiAsPromised);
そしてコードで:
// here is modified remaind of the code from the original question:
it('should display a new item in list', function() {
addItemButton.click();
expect(items.count()).should.eventually.equal(startCount+1);
});