2012-03-20 12 views
4

私は作業中のjQuery mobileアプリケーションのために、Jasmine testsを実装しています。エラーが発生し、jQueryモバイルライブラリの追加まで追跡できました。エラーは次のようになります。ジャスミンとjQuery Mobileとの互換性

Jasmine.js:1769 TypeError: Cannot read property 'abort' of undefined. 

jQMの依存関係を削除すると、エラーはなくなります。

は、これは私のコードです:

<!DOCTYPE html> 
<html> 
<head> 
    <title>HTML5/Common/Tests</title> 
    <!-- LOAD STYLES FIRST --> 
    <link type="text/css" rel="stylesheet" href="libs/jasmine.css" media="screen"> 
    <link type="text/css" rel="stylesheet" href="../../Common/libs/jquery.mobile-1.0.1.css" /> 
    <!-- LOAD JASMINE LIBRARIES --> 
    <script type="text/javascript" src="libs/jasmine.js"></script> 
    <script type="text/javascript" src="libs/jasmine-html.js"></script> 
    <!-- LOAD DEPENDENCIES --> 
    <script type="text/javascript" src="../../Common/libs/jquery-1.7.1.min.js"></script> 
    <script type="text/javascript" src="../../Common/libs/jquery.mobile-1.0.1.min.js"></script> 
    <!-- LOAD CODE TO TEST --> 
    <script type="text/javascript" src="../../Common/libs/myLib.js"></script> 
    <!-- LOAD ACTUAL TESTS --> 
    <script type="text/javascript"> 
     describe("Suite 1", function() { 
      it("Should be that 1 equals 0", function() { 
        expect(0).toEqual(1); 
      }); 
     }); 
    </script> 
</head> 
<body> 
    <script type="text/javascript"> 
    jasmine.getEnv().addReporter(new jasmine.TrivialReporter()); 
    jasmine.getEnv().execute(); 
    </script> 
</body> 
</html> 

私は私が考えるよう代わりにqUnitのこのアプリケーションのためのジャスミンを使用することを好むのより柔軟かつCIに実装し、BAのとPMのに説明しやすいです..しかし、この問題で数時間、Googleでいくつか無益な検索をした後、私はまだそれを解決することができなかったので、私は移動を検討し始めている。

私が行う前に、誰もこの同じ問題を経験して解決策を見つけましたか?

ありがとうございます。

UPDATE 3月20日:

チケットgithubのジャスミンプロジェクトである:

https://github.com/pivotal/jasmine/issues/204

答えて

9

私はjasmine-jqueryを使用してjQueryのモバイルスクリプトのジャスミンのテストを持っていることができました。

トリックは、ジャスミンランナーのhtmlを強化しようとするため、DOMready上でjqueryモバイル拡張を無効にする必要があるということです。 あなたは、HTMLランナーファイルの先頭に挿入され、このスクリプトでそれを行うことができます。

<script type="text/javascript"> 
    $(document).bind("mobileinit", function(){ 
    $.mobile.autoInitializePage = false; 
    }); 
</script> 

次に、あなたがあなたのフィクスチャから挿入されたHTML(ジャスミン-jqueryのfunctionnality)にjQueryのモバイルの強化をトリガする必要があります。

describe('my test', function(){ 
    beforeEach(function() { 
    loadFixtures("fixtures/MYFixture.html"); 
    $("#jasmine-fixtures").attr("data-role","page").trigger("create"); 
    } 
    it(... 
}); 
+0

パーフェクト。ちょうど私が探していた - ありがとう – akc42

+0

ニースの答え。それはちょうど私のproblem.Thanksを解決:) – sonam

1

自動初期化とハッシュ・リスニングの両方を無効にしてみてください:そして、ジャスミン-jqueryの治具にjqmページを追加

<script type="text/javascript"> 
    $(document).bind("mobileinit", function(){ 
    $.mobile.autoInitializePage = false; 
    $.mobile.hashListeningEnabled = false; 
    }); 
</script> 

、およびページを初期化する:

beforeEach(function() { 
    jasmine.getFixtures().set('<div data-role="page"></div>'); 
    $.mobile.initializePage(); 
});