0

私のemberコントローラーの単体テストを書こうとしています。プロパティを変更してから、ブートストラップ モーダルを開きます。モーダルが実際に開かれることをテストする方法を理解するのが難しい。これが単体テストまたは統合テストに属しているかどうかはわかりません。私の単体テストに含まれていない場合、後でコードカバレッジを判断するのは難しいようです。ブートストラップ バージョン: 3.3.1、ember-cli バージョン 0.1.5、ノード 0.10.33。これが私が無駄にしようとしたものです:

1.

test('loginClick() opens modal', function(){
  var controller = this.subject();
  $('#login-modal').on('show.bs.modal', function(){
    equal(true, true, "the show.bs.modal event fired");
  });

  controller.send('loginClick', 'anything');
});

アサーションエラーなし

2.

test('loginClick() opens modal', function(){
  var controller = this.subject();
  andThen(function(){
    controller.send('loginClick', 'anything');
    stop();

    Ember.run.later(function(){
        start();
        equal($('#login-modal').hasClass('in'), true, "has the 'in' class");
    }, 500);
  });
});

andThen は定義されていません

コントローラーは次のとおりです。

loginClick: function(param){
  this.set('provider', param);//facebook or google

  $('#login-modal')
    .modal();
}

この種のものをテストする方法に関する他の提案やベストプラクティスは高く評価されます。

psまた、クリックする前にこれを追加しようとしました:

$.support.transition = false;

誰かの提案によるが、モーダル遷移を無効にするわけではありません。

4

2 に答える 2

1

もう 1 つの一般的な解決策はwaitUntil、html 選択が表示されるのを待つ非同期ヘルパーを作成することです。

Ember.Test.registerAsyncHelper('waitUntil', function(app, selector, callback) {

  var waiter = function() {
    return $(selector).length > 0;
  };

  Ember.Test.registerWaiter(waiter);
  var promise = app.testHelpers.wait();

  promise.then(function() {
    Ember.Test.unregisterWaiter(waiter);
  });

  // it will be resolved when the pending events have been processed
  // (routing loads, ajax requests, run loops and waiters)
  return promise;
});

次に、waitUntil他の非同期ヘルパーで次のように使用できます。

waitUntil('#my-button');
click('#my-button');

または同期ヘルパーの前に:

waitUntil('#my-modal.modal').then(function() {
  var el = find('#my-modal.modal');
  assert.ok(el.length > 0, 'modal was open');

  ....
});

この例が示すようにregisterWaiterregisterAsyncHelper同様のユース ケースを解決するために組み合わせて使用​​できます。

于 2016-01-18T10:30:10.827 に答える