8

Toran Billup のTDD ガイドを使用して、ember との統合テストを行う際に問題が発生しています。

Qunit と Phantom JS のテスト ランナーとして Karma を使用しています。

if の半分は、Ember ランループに関する私の初心者の知識に関係していると確信しています。私の質問は2つの部分です:

1) vist() テストを実行ループに適切にラップするにはどうすればよいですか?

2) トランジションをテストするにはどうすればよいですか? インデックス ルート (「/」) は、「projects.index」というリソース ルートに遷移する必要があります。

module("Projects Integration Test:", {
  setup: function() {
    Ember.run(App, App.advanceReadiness);
  },
  teardown: function() {
    App.reset();
  }
});

test('Index Route Page', function(){
    expect(1);
    App.reset();    
        visit("/").then(function(){
            ok(exists("*"), "Found HTML");
        });
});

正しい方向への指針を前もって感謝します。

4

2 に答える 2

7

ember.js RC5 を使用して「/」ルートにヒットしたときに単純な遷移を行うサンプル アプリケーションをプッシュしました。

https://github.com/toranb/ember-testing-example

シンプルな「Hello World」の例は次のようになります

1.) 移行中にリダイレクトされるテンプレート

<table>
{{#each person in controller}}
<tr>
  <td class="name">{{person.fullName}}</td>
  <td><input type="submit" class="delete" value="delete" {{action deletePerson person}} /></td>
</tr>
{{/each}}
</table>

2.) ember.js アプリケーション コード

App = Ember.Application.create();

App.Router.map(function() {
    this.resource("other", { path: "/" });
    this.resource("people", { path: "/people" });
});

App.OtherRoute = Ember.Route.extend({
    redirect: function() {
        this.transitionTo('people');
    }
});

App.PeopleRoute = Ember.Route.extend({
    model: function() {
        return App.Person.find();
    }
});

App.Person = Ember.Object.extend({
    firstName: '',
    lastName: ''
});

App.Person.reopenClass({
    people: [],
    find: function() {
        var self = this;
        $.getJSON('/api/people', function(response) {
            response.forEach(function(hash) {
                var person = App.Person.create(hash);
                Ember.run(self.people, self.people.pushObject, person);
            });
        }, this);
        return this.people;
    }
});

3.) 統合テストは次のようになります

module('integration tests', {
    setup: function() {
        App.reset();
        App.Person.people = [];
    },
    teardown: function() {
        $.mockjaxClear();
    }
});

test('ajax response with 2 people yields table with 2 rows', function() {
    var json = [{firstName: "x", lastName: "y"}, {firstName: "h", lastName: "z"}];
    stubEndpointForHttpRequest('/api/people', json);
    visit("/").then(function() {
        var rows = find("table tr").length;
        equal(rows, 2, rows);
    });
});

4.) ほとんどの ember.js プロジェクトで使用する統合ヘルパー

document.write('<div id="foo"><div id="ember-testing"></div></div>');

Ember.testing = true;

App.rootElement = '#ember-testing';
App.setupForTesting();
App.injectTestHelpers();

function exists(selector) {
    return !!find(selector).length;
}

function stubEndpointForHttpRequest(url, json) {
    $.mockjax({
        url: url,
        dataType: 'json',
        responseText: json
    });
}

$.mockjaxSettings.logging = false;
$.mockjaxSettings.responseTime = 0;
于 2013-07-27T14:53:45.190 に答える