2012-01-10 6 views
1

私はいくつかの画像を循環するjQueryプラグインを開発しています。私はいくつかのテストを書いており、src属性が常に必要なときに変更されていることをテストしたい。トラブルは、原画像を javascriptテストで誤検出を避ける

  • 画像を順番に画像のリストに含まれている

    • サイクルのsetIntervalによって制御されるランダム
    • に選択されたページで使用することである起因しました、など、システムのパフォーマンスに、ビット予測不可能である

    だから時にはそれがテストが原因ランダムに入手できるものから選択され、元の画像に失敗する可能性があります、このように変化するように見えることは起こりませんでした。

    これらのような誤検出を避けるにはどうすればよいですか?

  • +0

    (現在ロードされているイメージの)単純なファイル名を比較していますか? – moey

    答えて

    0

    jquery toggle()を使用して、変更を加えたときにクラスを追加した後、追加したクラスを検索できます。トグルを呼び出すと、クラスが存在しない場合はクラスが追加され、存在する場合は削除されます。新しいイメージが必要な場合は設定され、オリジナルの場合は設定されません。

    +0

    これは、プラグインに少し必要のない機能が追加されるということです。 – wheresrhys

    +0

    テストとデバッグのツールとして便利です。他のコードとの相互関係が懸念される場合は、接頭辞付きのデータ属性を使用できます。 http://api.jquery.com/data/ – amccausl

    0

    このような場合、私は可能な限りモジュール化するように特別な注意を払っており、すべてのビットとピースを別々にテストすることができます。あなたは同じようにしなければならないように思えます。そのようにして、setIntervalの動作のようなものは、テストに与える影響がほとんどまたはまったくありません。

    たとえば、次のURLを選択するための専用の方法が必要です。これは、残りのコードとは独立してテストできます。このメソッドの目的のために、元の画像がリストにあるかどうかは気にしません。なぜなら、テストのために、あなたが望むものにイメージのリストを設定するからです。テストでは、メソッドを複数回呼び出すと、各呼び出しの結果が格納されます。次に、同じ文字列がすべての結果に含まれていないと主張します。

    +0

    この方法論をここで適用できるかどうかはわかりません。私はURLを変更する機能を持っていますが、これは設計上のパブリックメソッドではありません(プラグインのメソッドをpublicにするのは、ユーザーがカスタマイズしたいと思えば普通です。 – wheresrhys

    +0

    そのjavascript ...あなたは本当に物事を「プライベート」にしていますか? – hvgotcodes

    +0

    うん...どうして? – wheresrhys

    1

    我々はJavaScriptであるとして、あなたは、このようにMath.randomを上書きすることができます

    describe('some suite', function() { 
    
        it('Math.random should equal 1', function() { 
         var origRandom = Math.prototype.random; 
         Math.prototype.random = function(){return 1}; 
         expect(Math.random()).toEqual(1); 
         Math.prototype..random = origRandom; 
        }); 
    
    it('Math.random should equal 1 using jasmine', function() { 
         spyOn(Math, 'random').andReturn(1) 
         expect(Math.random()).toEqual(1); 
        }); 
    }); 
    

    別の方法ではなく、テスト

    +0

    私はこのアイデアが好きですが、私がテストしているメソッドで呼び出されたメソッドの場合は、Math.randomも – wheresrhys

    +0

    のテストでランダムを使用すると良いとは限りません。とにかくアイデア。この投稿を見てください:http://blog.tuxychandru.com/2009/11/mocking-mathrandom-using-powermock.html。それはJavaですが、同じEasyMock.expect(Math.random())と返す(0.50).anyTimes(); ' –

    1
    あなたがしたい関数の内部であっ作成する機能をレンダリングあなたに乱数を渡すことです

    jasmine Spy behaviourを使用して、メソッドが呼び出されていることを確認できます。特にspyMethod.callcountでは、メソッドが呼び出された回数を調べることができます。

    たとえば、このようなもの:

    var cycleMethod = SpyOn(jQPlugin.theCycleMethod).andCallThrough(); 
    
    waits(1000); 
    
    runs(function() { 
    
        expect(cycleMethod.callCount).toEqual(2); 
    
    }); 
    
    関連する問題