2016-03-01 68 views
0

我正在为需要一些相当复杂的json对象的项目编写单元测试。它们变得太冗长以至于无法插入spec文件,我想将本地json文件导入到我的测试中。我已经尝试了多种解决方案并不真正为这个项目工作: Loading a mock JSON file within Karma+AngularJS test Angular-Jasmine, loading json How to load external Json file using karma+Jasmine for angularJS testing?/ 和使用JavaScript与XMLHttpRequest() .... 什么是正确的方式去加载外部文件到规范,而无需创建新的依赖关系?单元测试:AngularJS + Karma + Jasmine,加载本地JSON

回答

0

我认为在您的案例中测试的最佳方式是使用$httpBackend。它允许使用您的$resource$http并为他们提供测试数据。

如果你要处理大量json对象,你可以在单独的js文件中定义它们(函数),包括这些文件在您的测试JS包,只是调用这些函数来回报您的json当你设置$httpBackend服务。 希望这有助于。

更新 由于测试只是普通的老js,您可以创建一个单独的js文件。并在其中声明一个函数,它将返回你的json。

(function (window) { 
    'use strict'; 

    if (!window.myJsonMocks){ 
     window.myJsonMocks = {}; //creating the object that will contain all the functions with json 
    } 

    window.myJsonMocks.myCustomersQueryResultJson = function(){ 
     return '{"value":[{"CategoryInfo":{"Id":1,"Type":1},"Caption":"Test","Path":"1/#/1"},{"CategoryInfo":{"Id":2,"Type":1},"Caption":"new","Path":"2/#/2"},{"CategoryInfo":{"Id":3,"Type":2},"Caption":"Another one","Path":"3/#/3"}]}' 
    }; 
})(window); 

既然你声明为IIFE它将注册在全球范围内的功能,因此,这将是在测试中使用。只要确保在测试场景之前包含它。然后你只需拨打

$httpBackend.when('GET', 'api/customerssdata').respond(window.myJsonMocks.myCustomersQueryResultJson()); 
+0

是的,我使用$ httpBackend来模拟其余的API。我认为你是正确的,但你能提供一个例子吗? – arturobelano

+0

是的,仍然有点困惑。我通过我的karma配置文件包含了js文件,但是如何将该JavaScript文件注入到我的规范中? – arturobelano

+0

完美答案,非常感谢。 – arturobelano

相关问题