Javascript 单元测试:AngularJS+;因果报应+;Jasmine,正在加载本地JSON

Javascript 单元测试:AngularJS+;因果报应+;Jasmine,正在加载本地JSON,javascript,angularjs,jasmine,karma-jasmine,Javascript,Angularjs,Jasmine,Karma Jasmine,我正在为一个需要一些相当复杂的json对象的项目编写单元测试。它们变得过于冗长,无法插入规范文件,我想将本地json文件导入到测试中。我已经尝试了许多对本项目不起作用的解决方案: 使用javascript和XMLHttpRequest()。。。。 在不创建新依赖项的情况下,将外部文件加载到规范中的正确方法是什么?我认为在您的情况下进行测试的最佳方法是使用。它允许您使用$resource或$http并向他们提供测试数据 如果您必须处理大型的json对象,您可以在单独的js文件(在函数中)中定义它们

我正在为一个需要一些相当复杂的json对象的项目编写单元测试。它们变得过于冗长,无法插入规范文件,我想将本地json文件导入到测试中。我已经尝试了许多对本项目不起作用的解决方案: 使用javascript和
XMLHttpRequest()
。。。。
在不创建新依赖项的情况下,将外部文件加载到规范中的正确方法是什么?

我认为在您的情况下进行测试的最佳方法是使用。它允许您使用
$resource
$http
并向他们提供测试数据

如果您必须处理大型的
json
对象,您可以在单独的js文件(在函数中)中定义它们,将这些文件包括在测试js包中,并在设置
$httpBackend
服务时调用这些函数返回
json
。 希望这有帮助

更新 因为测试只是普通的旧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());
使用夹具。在插件部分,添加“karma fixture”包并添加karma.conf.js

jsonFixturesPreprocessor: {
  variableName: '__json__'
}

是的,我使用$httpBackend来模拟RESTAPI。我想你是对的,但你能举个例子吗?是的,还是有点困惑。我通过karma配置文件包含js文件,但如何将该javascript文件注入规范?是否有方法仅将该文件注入当前规范文件的范围?还是最好在规范开头的注释中记录规范的“依赖项”?将一堆这样的js文件注册到全局作用域中会有什么后果吗?您可以避免像jQuery这样的全局作用域的污染,其他人也可以这样做-在全局作用域中声明1个变量(如果jQuery是$),并将一个对象分配给该变量,然后将所有函数分配给该对象。因此,在全局范围内只会得到一个变量,它将包含所有返回json的函数。
jsonFixturesPreprocessor: {
  variableName: '__json__'
}