如何在 Karma 测试中注入控制器?

问题描述

我想使用 Karma 运行 sample 测试 Angular 代码

我尝试修改上面的代码以确保该控制器将被注入以进行测试。不幸的是,inject 语句不会执行。我在 1.0.8 版中有 Angular 和 Angular-mocks,在 8.16.2 版中有 Node。我无法修改这些版本,因为我的所有项目可能会停止工作。

此外,我收到错误消息 TypeError: undefined is not an object (evaluating 'spec.$injector') in src/ProjectBundle/Resources/public/assets/vendor/bower_components/angular-mocks/angular-mocks .js(第 1715 行) workFn@src/ProjectBundle/Resources/public/assets/vendor/bower_components/angular-mocks/angular-mocks.js:1715:15.

在 Karma 的配置中,我有到 Angular、Angular-mock、JavaScript 代码和测试代码的路径。如果我尝试将路径直接添加到测试文件(带有 require 字样),则测试不起作用。

以下是修改后的示例文件片段。

const ids = ["5ffd5eb822084969b4dc9f74","5ffd5eb822084969b4dc9f74"];
const result = [];
// Loop through each element
ids.forEach(async(id) => {
    const foundResult = await Document.find({_id: id});
    result.push(foundResult);
})

下面是 angular-mock.js 文件的片段。

beforeEach(inject(function(_$controller_,_$rootScope_){
        console.info('test');

        $controller = _$controller_;
        $rootScope = _$rootScope_;
    }));

以下是karma-ci.conf.js文件的片段。

window.module = angular.mock.module = function() {
    var moduleFns = Array.prototype.slice.call(arguments,0);
    return isspecRunning() ? workFn() : workFn;
    /////////////////////
    function workFn() {
      var spec = getCurrentSpec();
      if (spec.$injector) {
        throw Error('Injector already created,can not register a module!');
      } else {
        var modules = spec.$modules || (spec.$modules = []);
        angular.forEach(moduleFns,function(module) {
          modules.push(module);
        });
      }
    }
  };

以下是 package.json 文件的片段。

module.exports = function(config) {
  config.set({
    frameworks: ['jasmine'],plugins : ['karma-jasmine','karma-phantomjs-launcher'],files: [
          'src/ProjectBundle/Resources/public/assets/vendor/bower_components/angular/angular.js','src/ProjectBundle/Resources/public/assets/vendor/bower_components/angular-mocks/angular-mocks.js','src/ProjectBundle/Resources/public/assets/javascripts/cm/**/*.js' // contains above example file,'src/ProjectBundle/Tests/Karma/Unit/Controllers/AngularCtrlSpec.js' // contains above example test
    ],browsers: ['PhantomJS']
  });
};

你知道我的问题有什么解决方案吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)