web-dev-qa-db-ja.com

Jasmineを使用して$(document).ready()内の関数またはコードをテストする方法は?

$(document).ready(function())内に複数の関数と多くのコードがあります。 jasmineを使用してready関数内の関数とready()内のコードをテストしていますが、describe内のテストケースを実行すると、ready内のコードにアクセスできません関数。

$(document).ready(function () {
    function testMe(){
        testVar = true;
    }
});

ジャスミンテストスイート

describe("test suite", function(){
    beforeEach(function () {
        testme = false
    });
    it("Test Alert Box Message For Change Modal", function() {
        expect(testme).toEqual(true);
    });
});

上記のアプローチのために取られる必要があるアプローチを親切に提案します。

7
makmak

コードでは、無名関数をdomreadyで呼び出します。この関数への参照があれば、それを呼び出すことができます。

var onReady = function(){
   testVar = true;
}

$(document).ready(onReady);

そしてあなたのテストで

it("Test Alert Box Message For Change Modal", function() {
    var testVar = false;
    onReady() ;
    expect(testVar).toEqual(true);
});

あなたのコードはテスト可能になりました:)名前空間とモジュールはそれをさらに良くするために推奨されます。

6
roo2

Ready関数の内部には、すべてのものとは別のスコープでグローバルにカプセル化されています。

テストケースを同じスコープに置いて機能させます。

取るべき他のアプローチは、クロージャで、匿名関数を(readyイベントハンドラで)ラップし、変数に入れて、それをreadyに渡すことです。そして、その変数を使用して、テストスイートに渡します。オブジェクト指向のJavaScriptを知らない人に説明して実装するのは複雑になる場合があります。

var testMe;
$(document).ready(function () {
    testMe=function testMe(){
        testVar = true;
    }
});

testMeが定義されました。それは閉鎖を作成しました。それらの技法の名前を忘れてしまったので、巻き上げを作成したと思います。

とにかく..読むのに最適な本は、効果的なJavascriptであり、優れたjavascript技術に慣れ親しんでいます。通常のプログラミング言語とは異なります。

2
XWormX