我有一个 angularjs 应用程序,其中包含一些使用 jquery 和引导组件的指令。因此,为了测试指令,我在 karma.unit.conf.js 中定义了以下文件顺序:
files = [
JASMINE,
JASMINE_ADAPTER,
'app/components/jquery/jquery.js',
'app/scripts/vendor/bootstrap.js',
'app/components/angular/angular.js',
'app/components/angular-mocks/angular-mocks.js',
'app/components/angular-ui/build/angular-ui.js',
'app/scripts/app.js',
'app/scripts/**/*.js',
'test/spec/unit/**/*.js'
];
如果我先加载 angularjs 和 angular-mocks,然后加载 jquery 和 bootstrap,测试会运行并失败,因为 angular 使用自己的 jQLite。但是,如果我改变了我在这里写的顺序,那么这就是我得到的:
编辑:
我发现导致异常的不是 jQuery ......它是 bootstrap.js。如果我注释 bootstrap.js 行,测试就会运行(并且失败,正如预期的那样,因为从未加载过引导组件)。如果我如上所述加载引导程序(或在测试之前的任何其他地方),那么我会得到这个:
PhantomJS 1.8 (Linux) Directive: tkModal should make hidden element visible FAILED[39m
at /home/ir/work/campari/app/components/jquery/jquery.js:1763
at /home/ir/work/campari/app/components/jquery/jquery.js:2833
at /home/ir/work/campari/app/components/jquery/jquery.js:2850
at /home/ir/work/campari/app/components/jquery/jquery.js:2850
at /home/ir/work/campari/app/components/jquery/jquery.js:2850
...
at /home/ir/work/campari/app/components/jquery/jquery.js:2850
at /home/ir/work/campari/app/components/jquery/jquery.js:2850
at /home/ir/work/campari/app/components/jquery/jquery.js:2850
at /home/ir/work/campari/app/components/jquery/jquery.js:3656
at /home/ir/work/campari/app/components/jquery/jquery.js:648
at /home/ir/work/campari/app/components/jquery/jquery.js:270
at /home/ir/work/campari/app/components/jquery/jquery.js:3657
at /home/ir/work/campari/app/components/jquery/jquery.js:3664
at /home/ir/work/campari/app/components/angular-mocks/angular-mocks.js:1589
at /home/ir/work/campari/app/components/angular-mocks/angular-mocks.js:1627
在测试失败之前,该行at /home/ir/work/campari/app/components/jquery/jquery.js:2850
无休止地重复了大约 15k 次(这似乎发生在 jQuery 尝试在 jquery.js:1763 处执行 internalData 函数时)。
任何想法将不胜感激
编辑:已解决
找到了答案,这是 2.3.0 版本中的引导问题,更新到 2.3.1 解决了它。见https://github.com/twitter/bootstrap/issues/6835