Grunt-Karma-Jasmine:找不到模块

时间:2015-10-28 06:02:00

标签: angularjs karma-jasmine gruntfile

我正在尝试为我的Angular.js项目设置测试,并且我不断获得" $ injector:nomod,Module'结果'不可用!你要么拼写错误......"错误。我确信我包括"结果" "文件中的模块"数组内部" karma.config.js",基本上它看起来像这样:

files: [
          '../javascripts/jquery-2.1.4.min.js',
          '../jquery-ui/jquery-ui.min.js',
          '../D3/d3.js',
          'libs/angular.min.js',
          'libs/angular-route.min.js',
          'libs/angular-animate.min.js',
          'libs/selectize.js',
          'libs/angular-selectize.js',
          'libs/angular-mocks.js',

          'simulator.js',

          '*.js',
          'services/**/*.js',
          'qa/tests-*.js'
],

...

我最初认为主模块的排序:'模拟器' (在simulator.js'文件中定义)是错误的,所以我特意将它向上移动,之前 其他模块,如下面的stackoverflow线程建议:

Angular module not available in Karma Jasmine test run

没有帮助。然后我尝试确保以与我的角度应用程序相同的顺序导入文件。主条目文件(angular-mocks.js和qa / tests - * .js除外),导入每个文件,而不是使用通配符,但没有成功。

Jasmine肯定会进入测试文件,但偶然发现我试图导入模块的行#34;结果":

describe('simulator.chartService', function() {

var chartService;
var graphConfig;

console.log("instantiating module result");
  beforeEach(module('result'));
console.log("finished instantiating");

beforeEach(inject(function($injector) {
  graphConfig = $injector.get('graphConfig');
  chartService = $injector.get('chartService');

}));

it('should be created', function() {
  expect(chartService.calcColors(10)).not.toBeNull();
});

});

因此,我发现错误发生在两个console.log()语句之间。

我怀疑我的文件在数组内排序仍然有问题"文件" in" karma.config.js"。我有主模块"模拟器"这取决于其他模块:

angular.module('simulator', ['ngRoute','ngAnimate','selectize','newexp2','newexp','login','edit','exps', 'result','templates','commons'])

模块' newexp2',' newexp','登录','编辑',' exps',& #39;结果','模板'都依赖于模块' commons'。

如何在"文件中正确导入相互依赖的模块"阵列? 它是否足以放置" simulator.js",主要模块,高于所有其他模块, 或者我还需要在" commons.js"?

之前放置所有其他模块

另一个我的怀疑是我从官方角度网站下载的angular.js库版本" angular-mocks.js",可能与我正在使用的其他模块不兼容。我和#34; angular-animate.js"有一个问题。之前的文件。

只要我用$(function(){...})包围我的测试代码(并且所有其他模块都被它包围),它在导入result模块时不会产生错误,所以我开始看到两个{ {1}}语句之间没有错误,但是,这会产生一些未知错误,导致我无法调用console.log()部分,而当我不用it包围它时,{调用{1}}测试,但模块$(function(){...})导入失败。

到目前为止,我几乎陷入困境,不知道在哪里移动以及尝试什么。任何建议都将不胜感激。

1 个答案:

答案 0 :(得分:0)

好的,我明白了。问题是我的所有角度代码都包含在#include <stdio.h> #include <stdlib.h> #include <string.h> #define MAXWDS 20 #define MAXCHR 60 int main (int argc, char **argv) { char line[MAXCHR] = {0}; char *words[MAXWDS] = {NULL}; FILE *pFile = NULL; size_t i, index = 0; /* validate sufficient input */ if (argc < 2 ) { fprintf (stderr, "error: insufficient input, usage: %s filename\n", argv[0]); return 1; } /* open file provided on command line for reading */ pFile = fopen (argv[1], "r"); if (!pFile) { fprintf (stderr, "error: file open failed '%s'.\n", argv[1]); return 1; } while (fgets (line, 60, pFile)) /* read each line in file */ { size_t len = strlen (line); /* strip trailing newline (or carriage return newline ) */ while (len && (line[len-1] == '\n' || line[len-1] == '\r')) line[--len] = 0; /* overwrite with null-terminating char */ words[index++] = strdup (line); /* allocate & copy */ if (index == MAXWDS) /* check pointer limit */ break; } if (pFile != stdin) fclose (pFile); /* output in a single line */ for (i = 0; i < index; i++) { printf (" %s", words[i]); free (words[i]); /* free allocated memory */ } putchar ('\n'); return 0; } 内。解决方案是删除所有$(function(){...}),然后重新排序主条目.html文件中的javascript导入,然后所有测试开始运行良好。 用以下内容标记为重复的问题可能更好:

Angular document.ready() issue