【发布时间】:2016-04-24 18:45:47
【问题描述】:
我正在尝试为基于 AngularJS 的 JavaScript 插件设置单元测试。该插件通过 Gulp 与 Browserify 捆绑在一起。它依赖于从bower_components 文件夹注入wiredep 和gulp-inject 的外部库。这一切在生成的包中运行良好,但如果我尝试通过 gulp 运行 Karma 单元测试,我会收到以下错误:
Uncaught TypeError: angular.module is not a function at /tmp/94dbea5947f4758ab1ee6935e2f4b3f1.browserify:365
在这个文件中,angular 加载了var angular = require('angular');,console.log(angular) 给出了一个空对象。
我的karma.conf.js:
'use strict';
const istanbul = require('browserify-istanbul');
const isparta = require('isparta');
const mainBowerFiles = require('main-bower-files');
const karmaBaseConfig = {
basePath: '../',
frameworks: ['jasmine', 'browserify'],
preprocessors: {
'app/js/**/*.js': ['browserify', 'coverage'],
'**/*.html': ['ng-html2js']
},
browserify: {
debug: true,
extensions: ['.js'],
transform: [
[["babelify", {"ignore": "/\/bower_components\//"}]],
'browserify-ngannotate',
'bulkify',
'debowerify',
'brfs',
istanbul({
instrumenter: isparta,
ignore: ['**/bower_components/**', '**/node_modules/**', '**/test/**']
})
]
},
ngHtml2JsPreprocessor: {
stripPrefix: 'app/',
moduleName: 'templates'
},
plugins: [
'karma-jasmine',
'karma-coverage',
'karma-browserify',
'karma-ng-html2js-preprocessor',
'karma-chrome-launcher'
],
files: mainBowerFiles({
filter: '**/*.js',
paths: {
bowerDirectory: 'bower_components',
bowerrc: '.bowerrc',
bowerJson: 'bower.json'
}
}).concat([
// app-specific code
'app/js/main.js',
// 3rd-party resources
'node_modules/angular-mocks/angular-mocks.js',
// test files
'test/unit/**/*.js'
]),
exclude: [],
reporters: ['progress', 'coverage'],
port: 9876,
colors: true,
autoWatch: false,
browsers: ['Chrome'],
singleRun: true
};
const customLaunchers = {
chrome: {
base: 'SauceLabs',
browserName: 'chrome'
}
};
const ciAdditions = {
sauceLabs: {
testName: 'Karma Unit Tests',
startConnect: false,
build: process.env.TRAVIS_BUILD_NUMBER,
tunnelIdentifier: process.env.TRAVIS_JOB_NUMBER
},
browsers: Object.keys(customLaunchers),
customLaunchers: customLaunchers,
reporters: ['progress', 'coverage', 'saucelabs']
};
module.exports = function (config) {
const isCI = process.env.CI;
config.set(isCI ? Object.assign(karmaBaseConfig, ciAdditions) : karmaBaseConfig);
};
所有主要应用程序文件位于app/ 下,bower 文件位于bower_components/ 下,节点模块位于node_modules/ 下,测试规范位于test/unit/ 下。
它基于这个样板:https://github.com/jakemmarsh/angularjs-gulp-browserify-boilerplate。
错误发生在 Karma 启动 Chrome 之后,但在执行任何单元测试之前(我在单元测试中检查了 console.log)。
任何帮助将不胜感激。
【问题讨论】:
标签: javascript angularjs karma-runner browserify isparta