3

初めてモカテストを学ぼうとしています。次のような簡単なテスト スクリプトを作成しました。

describe('Analytics Test Suite', function(){
//http://emberjs.com/guides/testing/integration/
before(function() {
    AS.rootElement = '#ember-application-container';
    AS.setupForTesting();
    AS.injectTestHelpers();
    AS.reset();
});

describe('visit analytics index page', function(){
    visit("/analytics").then(function() {
        it('should return -1 when the value is not present', function(){
            expect([1,2,3].indexOf(4)).to.be(-1);
            expect([1,2,3].indexOf(0)).to.be(-1);
        })
    });
})
});

しかし、私はこのjsエラーを受け取ります:

ReferenceError: 訪問が定義されていません

しかし、コードを次のように変更すると:

describe('Analytics Test Suite', function(){

AS.rootElement = '#ember-application-container';
AS.setupForTesting();
AS.injectTestHelpers();
AS.reset();


describe('visit analytics index page', function(){
    visit("/analytics").then(function() {
        it('should return -1 when the value is not present', function(){
            expect([1,2,3].indexOf(4)).to.be(-1);
            expect([1,2,3].indexOf(0)).to.be(-1);
        })
    });
})
});

これらのエラーが発生します: TypeError: app._ container _.lookup(...) is undefined

最初のシーンでは、visit 関数が欠落しているように見えますが、これは初期化コードを before の外に置くと解決されます。しかし、タイプ エラーが発生します。AS._コンテナー_lookupを探すべきだったと思いますが、アプリの名前空間を調べています。私はemberデバッグバージョンhttp://builds.emberjs.com/tags/v1.0.0/ember.jsを使用しています

あなたの助けは大歓迎です。jsbin http://jsbin.com/ILUbuy/2/も追加しました。

ありがとう、ディー

更新 このアダプターを追加して問題を解決しました:https://github.com/teddyzeenny/ember-mocha-adapter

4

1 に答える 1

1

この投稿のフォローアップとして、jsbin を使用して実際の例を示します。Firefox で最初に ember アプリのテストを開始したとき、常に次のエラーが発生することに気付きました。

"before each" hook ‣
     router is undefined

しかし、これはクロムでは起こりません。私のリードは、私が正しく行っていないことや、私が見逃していることを発見しただけです。基本的に mocha は、 mocah.run() が実行されたときにアプリケーションを実行する必要がある div を見つけられなかったため、簡単な解決策は次のとおりでした:

$(document).ready(function(){
    mocha.run();
});

私が得た別のエラーは、なぜ私が得たのか分かりませんでした:

router.getHandler is not a function

App.reset(); を追加しなかったことが原因であることが判明しました。私のbeforeEachフックで。

div が (jquery UI、.tollge('slow') を使用して) クリック時にトグルしているかどうかをテストしなければならなかったこの 1 つのインスタンスがありました。問題は、テストが正常に実行されることでしたが、その後のテストは常に失敗し、なぜこれが起こっているのか理解できませんでした. jquery UI が原因であることはわかっていました。派手な効果を使用せずに可視性を div に直接設定するとテストが実行されるため、内部で setTimeouts を使用している場所で同様のことが起こっている場合は、次のようにしてテストします:

 it("some test", function () {
    var context = this;            

    click(toggleButton).then(function () {
        Ember.run.later(context, function () {

        }, 1000);
        wait().then(function () {
            expect(DIV TO BE HIDDEN OR VISIBLE);
        });
    });
});

このリンクも非常に役に立ちました: http://instructure.github.io/blog/2014/01/24/ember-run-loop-and-tdd/

ここに実例があります: http://jsbin.com/opuJetOy/1/ 上記のリンクはクロムでは機能しません.クロムは次のようなリンクを好まないようです: ' https://raw.github.com/ . ...' ですが、firefox では動作します。

于 2014-02-03T16:02:29.133 に答える