1

新しい ember-cli アプリケーションがあり、ページ上のボタンをクリックしてモーダル ウィンドウを表示する (またはボタンをクリックした後にその存在を確認する) 統合テストをセットアップしています。

これは統合テストです:

import { test } from 'ember-qunit';
import Ember from 'ember';
import startApp from '../helpers/start-app';

var App;

module('Integration Test - Guest Page', {
  setup: function(){
    App = startApp();
  },
  teardown: function(){
    Ember.run(App, 'destroy');
  }
});


test('guest login modal loads after click', function() {

  expect(3);

  visit('/guest');

  andThen(function() {
    var $modalLink = $("button#guestModalBtn"),
        $modalWindow = $(".modal", "div");
    ok(find($modalLink).length, 'guestModalBtn is present');
    ok(!find($modalWindow).length, 'guest modal element IS NOT present');

    click('.guestmodal');

  });

});

click() リクエストにヒットするとすぐに、テストは失敗します。

TypeError: undefined is not a function

私がオンラインで見たすべての例には、このメソッドが含まれています。私が取り出したのは間違いなくクリックであり、QUnit ではすべての結果が緑色です。

これは問題のルートにロードされているテンプレートです:

{{outlet}}

<button id="guestModalBtn" 
    class="guestmodal" 
    {{action 'showModal' 'guest-details-modal' model}}>
Guest Details
</button>

以下のコメント (ありがとう) に応えて、showModal アクションは、以下に示す routes/application.js ファイルから派生します。

import Ember from 'ember';

export default Ember.Route.extend({
  actions: {
    showModal: function(name, content) {
      this.controllerFor(name).set('content', content);
      this.render(name, {
        into: 'application',
        outlet: 'modal'
      });
    },
    removeModal: function() {
      this.disconnectOutlet({
        outlet: 'modal',
        parentView: 'application'
      });
    }
  }
});

私が何を間違っているのか、またはこのクリックイベントが発生しない (または見つからない) 理由を誰かに教えてもらえれば、非常に感謝しています。

どうもありがとう

4

1 に答える 1

0

ボタンの ID をクラスではなくクリック ヘルパーに渡してみてください。そのクラス名を持つ要素が複数ある場合、クリックヘルパーがクリックするものをどのように解決するかわかりません。

変化する:

click('.guestmodal');

click('#guestModalBtn')
于 2014-11-18T16:47:57.830 に答える