2012-03-20 4 views
4

저는 jQuery mobile 응용 프로그램에 대해 Jasmine tests을 구현하는 중입니다. 나는 jQuery 모바일 라이브러리를 추가하는 것으로 추적 할 수있는 오류가 발생했습니다. 오류는 다음과 같습니다.jasmine과 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의에게 설명하기 쉽게 ... 그러나 몇 시간 동안이 문제로 땜질하고 구글에 대한 쓸데없는 검색을 한 후에 나는 여전히 그것을 해결할 수 있었다. 그래서 나는 계속 전진 할 생각이다.

내가하기 전에 누구나이 동일한 문제를 경험하고 해결책을 찾았습니까?

감사합니다.

UPDATE 3월 20일 :

티켓은 GitHub의 재스민 프로젝트에이 :

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

답변

9

나는 jasmine-jquery를 사용하여 JQuery와 모바일 스크립트의 자스민 검사를 할 수 있었다.

트릭은 jasmine 러너의 html을 향상 시키므로 DOMready에서 jquery mobile enhancement를 비활성화해야한다는 것입니다.

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

그런 다음 당신은 당신의 고정 (재스민 - JQuery와 functionnality)에서 삽입 된 HTML에 JQuery와 모바일의 향상을 트리거해야합니다 당신은 HTML 러너 파일의 헤드에 삽입이 스크립트와 함께 할 수 있습니다 : 자동 초기화 및 해시 듣기를 모두 해제

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

완벽한. 내가 뭘 찾고 있었는지 - 감사합니다 – akc42

+0

좋은 답변. 방금 문제를 해결했습니다. 감사합니다. :) – sonam

1

시도 :

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

그런 다음 자스민 - JQuery와 고정에 JQM 페이지를 추가하고, 페이지 초기화 :

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