使用karma浏览器对AngularJS应用程序进行单元测试
Unit testing AngularJS application with karma-browserify
我正试图通过karma Browserify对AngularJS/Browserify应用程序进行单元测试。最终,当我运行我的吞咽因果报应任务时,我得到了错误Error: [$injector:nomod] Module 'myApp' is not available! You either misspelled the module name or forgot to load it...
我的gullfile.js有任务
gulp.task('test', function(done) {
new karma.Server({
configFile: __dirname + '/karma.conf.js'
}, done).start();
});
我的因果报应.conf.js包括
{
// ...
frameworks: ['browserify', 'jasmine'],
files: [
'node_modules/angular/angular.js',
'node_modules/angular-mocks/angular-mocks.js',
'spec/**/*.js'
],
preprocessors: {
'spec/**/*.js': [ 'browserify' ]
},
browserify: {
debug: true
}
// ...
}
我在包含的main.js中定义我的模块
require('angular').module('myApp', [
//...lots of `require`s for each dependency...
]);
我在一个看起来像的MainCtrl.js中定义了我的控制器
function MainCtrl(/*...deps...*/) {
var ctrl = this;
ctrl.foo = 'bar';
}
module.exports = MainCtrl;
然后将控制器注册到其他地方,如
var app = require('angular').module('myApp');
app.controller('MainCtrl', [/*...deps...*/, require('./MainCtrl')]);
最后,我的测试看起来像
(function() {
"use strict";
describe('MainCtrl', function() {
var ctrl;
beforeEach( angular.mock.module('myApp') );
beforeEach( inject( function($controller) {
ctrl = $controller('MainCtrl');
}));
it('should be defined', function() {
expect(ctrl).toBeDefined();
});
});
}());
变通办法
我的解决方法是将我的main.js
文件添加到karma.conf.js
files: [
'js/main.js', // ADDED: Defines the app and `require`s angular
'node_modules/angular-mocks/angular-mocks.js',
'spec/**/*.js'
],
preprocessors: {
'js/main.js': ['browserify'], // ADDED
'spec/**/*.js': ['browserify']
}
一切正常。但我认为我不应该将我的源文件添加到karma中(至少不应该使用karma浏览)。这是建立我的项目的正确方式吗?
是的,"变通方法"是使用karma-browserify
的理想方法。
preprocessors
定义指定包含的文件应由哪个预处理器处理,但不包括它们:
预处理器配置对象的键用于过滤文件配置中指定的文件。
实际上包括文件的是files
定义:
文件阵列确定浏览器中包含哪些文件,以及哪些文件由Karma监视和服务。
文件告诉Karma相对于基本路径应该加载哪些文件。这些是:
所有与测试相关的库我们要测试的源代码测试本身
相关文章:
- 使用Node.js在应用程序引擎上进行本地单元测试
- 如何使用Karma单元测试运行程序捕获console.error
- 使用karma浏览器对AngularJS应用程序进行单元测试
- 当使用 Jasmine 对我的 angularJS 应用程序进行单元测试时,$interval是未定义的
- 用于单元测试和运行基于浏览器的 Web 应用程序的 Javascript 日志记录设置
- Spotify应用程序的推荐单元测试框架/测试运行程序
- 单元测试使用$translatePartialLoaderProvider的AngularJS应用程序
- 如何使用qunit在ember-cli应用程序中对Routes进行单元测试
- 单元测试提供程序配置中的$urlRouterProvider.otherwise
- Ext.JS 4.2.1使用Jasmine进行单元测试-未定义应用程序
- 用于在纯客户端测试应用程序(javascript/jquery)中维护状态和管理i/o的体系结构
- 在大型web应用程序中处理JavaScript(可重用性、捆绑、单元测试等)
- 单元测试混合角度/反应应用程序
- 在Windows Phone 8.1模拟器中测试应用程序设置
- 如何对一个主要负责重定向到应用程序外部页面的Angular服务进行单元测试
- 测试应用程序:javascript中的按钮不起作用
- 防止用户在测试应用程序中重新加载/刷新页面的方法
- 全新的角度.制作一个非常简单的测试应用程序
- 如何在移动端测试应用程序
- 如何为HTML和JS编写实时测试应用程序并捕获页面加载事件