beforeEach在angularjs / requirejs场景中没有通过Karma / Jasmine调用

时间:2016-08-10 14:21:36

标签: angularjs angularjs-scope requirejs karma-runner karma-jasmine

在本地运行我的单元测试工作正常但在构建服务器上发生了最愚蠢的事情:有时他们会通过,有时他们不会。主要代码:

define(['angmock', 'someMore'], function () {
    describe('myController', function () {
        beforeEach(function () {
        console.log("Entry - Initializing modules...");
        module('module1');
        module('module2');
        console.log("Exit - Initializing modules...");
    });

    var scope, controller;
    beforeEach(inject(function ($rootScope, $controller) {
        console.log("Entry - Creating scope...");

        scope = $rootScope.$new();
        controller = $controller('myController', {
            $scope: scope
        });

        console.log("Exit - Creating scope...");
    }));

    it('should test something', function () {
        console.log("Entry - Test A");
        scope.myImportantAssignment = variableName;
        ...
        console.log("Exit - Test A");
    });
...

在构建服务器日志中,我有时可以阅读:

  

TypeError:undefined不是对象(评估   'scope.myImportantAssignment = variableName')

在控制台上我可以读到:

  • 日志:'输入 - 初始化模块......'
  • 日志:'退出 - 初始化模块......'
  • 日志:'进入 - 测试A'

这可能表明第二个beforeEach根本没有被调用,因此范围没有被初始化。但为什么?在我看来,处理应该像:

  • beforeEach 1
  • beforeEach 2

但事实似乎并非如此。是不是有异步问题?非常感谢任何一点提示,因为如果它们有时失败,我根本无法使用这些测试......

1 个答案:

答案 0 :(得分:11)

没有可以解释问题的竞争条件,块是同步的并且总是按顺序运行。如果应用程序无提示无法自举并在 >> import xgboost as xgb Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/home/deploy/anaconda3/lib/python3.5/site-packages/xgboost/__init__.py", line 11, in <module> from .core import DMatrix, Booster File "/home/deploy/anaconda3/lib/python3.5/site-packages/xgboost/core.py", line 112, in <module> _LIB = _load_lib() File "/home/deploy/anaconda3/lib/python3.5/site-packages/xgboost/core.py", line 106, in _load_lib lib = ctypes.cdll.LoadLibrary(lib_path[0]) File "/home/deploy/anaconda3/lib/python3.5/ctypes/__init__.py", line 425, in LoadLibrary return self._dlltype(name) File "/home/deploy/anaconda3/lib/python3.5/ctypes/__init__.py", line 347, in __init__ self._handle = _dlopen(self._name, mode) OSError: /home/deploy/anaconda3/lib/python3.5/site-packages/xgboost/./lib/libxgboost.so: invalid ELF header 上抛出,则可能会发生这种情况。

控制台应该有错误,但PhantomJS因吞咽错误而闻名,将Karma启动器更改为Chrome可能会改善错误输出。

injectinject移动到beforeEach也可以帮助找到问题,它会使规范失败而不是失败的期望,但会导致错误导致此期望失败。

在单元测试中,应用程序单元已经过测试,其他所有内容都应该被模拟,具有额外的依赖关系(Kendo UI的Angular包装器)会为规范添加更多移动部件。