2012-03-20 67 views
4

我刚刚在实施一些Jasmine tests我正在处理的jQuery mobile应用程序的中间,我遇到了一个错误,我设法追踪添加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实施和解释广管局和PM的..然而,在对这个问题进行了几个小时的修补以及在谷歌上一些徒劳的搜索之后,我仍然无法解决这个问题,所以我开始考虑继续前进。

在我做之前,有没有人遇到同样的问题,并找到了解决方案?

感谢和问候。

更新3月20日:

票是在github上茉莉花项目:

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

回答

9

我能够在使用jasmine-jquery jQuery Mobile的脚本茉莉测试。

诀窍是您需要禁用DOMready上的jQuery移动增强功能,因为它会尝试增强茉莉花亚军的html。

<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 2013-04-20 15:11:35

+0

很好的答案。它只是解决了我的问题。谢谢:) – sonam 2013-12-03 06:40:57

1

尝试禁用这两种自动初始化和哈希听:

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

的JQM页面然后添加到茉莉花的jQuery夹具和初始化页面:

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