web-dev-qa-db-ja.com

Protractorを使用してe2eテストで要素の動的なカウントを期待する方法

私は現在、控え目な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!
});
_

しかし、最後に同じ結果を得ました... expectthenに入れることができません。私もそれについて考えました。

  • Protractor GitHubリポジトリの問題、StackOverflow、Google AngularJsグループを検索しました。

付録:

console.log(startCount)はこれを出力します:

_{ then: [Function: then],
  cancel: [Function: cancel],
  isPending: [Function: isPending] }
_

.toEqual(6)と書くこともできましたが、アプリの起動状態を変更する必要があるたびにテストを書き直したくありません。

何か案が?前もって感謝します!!

18
glepretre

約束を解決してから、アサーションを実行する必要があります。

分度器は、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);
});
25
Andres D

アサーションに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);
});
2
ciekawy