Karma + Webpack Angular 控制器未找到

Karma + Webpack Angular controller not found

本文关键字:控制器 Angular Webpack Karma      更新时间:2023-09-26

我在这篇博客文章的帮助下使用 webpack 建立了一个 Angular 项目,该博客文章在 Github 上有一个相关的样板文件。

该应用程序本身运行良好,但是当我运行业力时,它说它找不到它试图测试的控制器。

// karma.config.js
module.exports = config => config.set({
  files: ['test.webpack.js'],
  preprocessors: {
    'test.webpack.js': ['webpack', 'sourcemap']
  },
  browsers: ['PhantomJS2'],
  webpack: require('./webpack.config'),
  webpackMiddleware: {
    noInfo: 'errors-only',
  },
});
// test.webpack.js
import 'angular';
import 'angular-mocks/angular-mocks';
const testContext = require.context('./', true, /'.spec'.js$/);
testContext.keys().forEach(testContext);

我现在只有一个规格文件供MainCtrl.spec.js.业力会运行它,但我收到错误:

参数"MainCtrl"不是一个函数,未定义

当我实际运行该应用程序时,MainCtrl似乎加载得很好,所以我不确定为什么 Karma 无法获得它。

我也尝试将'.spec'.js更改为仅'.js但这会导致更多错误。

我能够通过重新思考工作流程来解决这个问题。两个主要问题是module无法从ngMocks全局导出(与节点导入系统存在冲突)。另一个是测试还必须首先加载所有模块文件,这对于 Karma 来说是非常典型的。

// karma.config.js
files: ['app/index.js', 'test.webpack.js']
preprocessors: {
  'app/index.js': ['webpack'],
  'test.webpack.js': ['webpack'],
}

// test.config.js
/* Angular is already imported by app/index.js */
import 'angular-mocks/angular-mocks';
/* MUST use `angular.mock.module`. `module` alone won't work */    
beforeEach(angular.mock.module('ngculator'));
const testContext = require.context('.', true, /'.spec'.js$/);
testContext.keys().forEach(testContext);