大型JS应用程序避免了多个karma.conf.JS文件
Big JS app avoiding multiple karma.conf.js files
我使用因果报应+茉莉花+幻影进行无头Javascript测试。
我的问题是,我有一个非常大的应用程序,由许多JS模块组成,我想测试这些模块所以我需要每个案例的自定义mock和每个案例的定制include
karma.conf.js
只允许我有files
数组,它由所有文件的模式组成,如果我的应用程序很小,而不是一个有大量文件和模块的大应用程序,这是很好的。
我的解决方案目前-为每个测试用例创建多个karma.conf.js
文件。但这真的很糟糕,因为有这么多配置文件是一个大问题,如果我想更改一个设置(如autoWatch),我需要更改所有配置文件。
我的其他解决方案-在karma.conf.js
前面编写自定义处理程序来处理其他参数(规范文件或文件夹,以绕过搜索其配置文件的因果报应),并简单地动态构建files
阵列。
现在我看到的问题是因果报应只运行一次,我将被限制运行一个测试规范…并且我不想修改karma本身。
我也考虑过使用Grunt,但还没有找到一种方法使其适用于多个测试用例。
顺便说一句,我的理想结构是这样的:
拥有文件:
test/specs/category/unit1_spec.js
test/mocks/category/unit1_mock.js
配置文件:
files: [
{
'includes': [array_of_includes],
'spec': 'spec_file'
}
]
mock文件将自动从适当的mocks目录中获取。
我可以做karma start test/specs/category
,它会递归地运行文件夹中的所有测试用例。
tl;博士-我想舒服地测试一个大应用程序
如果有任何建议来处理这项任务,我将不胜感激
使用ENV变量将参数传递到karma.conf.js:中的文件
files: [
include1, include2, ..., includeN,
process.env.JS_TESTS + "/*.js"
]
然后像这样运行因果报应:
JS_TESTS=test/category2 karma start karma.conf.js
您可以在karma配置文件中使用require语句。
例如,在您的因果报应配置文件中,您可以执行以下操作:
files: require('./karma.conf.files')
想要更全面的答案。。我从这个链接中找到了另一个解决方案:https://groups.google.com/forum/#!主题/因果报应用户/uAf7TuVBmCQ
因果报应0.8(当前稳定)
// shared_conf.js
module.exports = {
port: 8080
};
// karma1.conf.js
var shared = require('./shared_conf.js');
port = shared.port;
因果报应0.9(当前处于金丝雀版本):
// shared_conf.js
module.exports = function(karma) {
karma.configure({
port: 8080
});
};
// karma1.conf.js
var shared = require('./shared_conf.js');
module.exports = function(karma) {
shared(karma);
karma.configure({
// override
});
};
这使我能够从一个单独的配置文件中提取一组文件名。
咕哝因果报应听起来非常适合您的需求
它是一个复杂的多任务处理,允许子任务有一个通用配置,可以被特定的子任务覆盖。
该插件将Karma配置整合到一个文件中。例如:
karma: {
options: {
configFile: 'karma.conf.js',
runnerPort: 9999,
browsers: ['Chrome', 'Firefox']
},
category1: {
files: ['app/js/category1/**/*.js', 'test/category1/*.js']
},
category2: {
files: ['app/js/category2/**/*.js', 'test/category2/*.js']
}
}
我注意到,无论传递到命令行的参数是什么,都会在初始配置对象中得到这个参数camelBase。
> karma start i-wanna-debug
module.exports = function (config) {
config.set({
singleRun: config.iWannaDebug ? false : true
});
};
这允许您在多个配置中使用单个Karma配置文件。
我注意到2022年没有答案,所以它是:
- 需要您的基本
karma.conf.js
并保存到常量中 - 它返回一个您可以调用的函数,所以请先在配置中调用它
- 然后应用任何覆盖
最终代码可能看起来类似于此:
module.exports = function (config) {
const baseConfig = require('../karma.conf');
baseConfig(config);
config.coverageReporter.dir = require('path').join(__dirname, '../../../coverage/my-lib_secondary');
};
在我的案例中,我需要所有代码覆盖率报告都显示在一个文件夹中,从主应用程序、库及其辅助端点。应用程序正在使用Angular 14。
- Unit-testing multiple use cases with Karma & Mocha.js
- 配置 karma.js 以使用 react 和 ES6
- 为angular-connect.static和karma安装node.js
- 大型JS应用程序避免了多个karma.conf.JS文件
- 如何在 Karma 中配置 System.js 以测试取决于时刻.js的代码
- 如果“.jshintrc”和“karma.conf.js”,Jasmine“test”文件夹的一部分受到版本控制
- Karma 单元测试 Angular JS 指令与 externalUrl
- jsonp 回调(stripe.js)中延迟承诺的 Karma 单元测试
- 使用Karma和Jasmine从JS测试文件测试编译的TypeScript
- karma.js在基本的“;因果报应;设置
- 如何使karma.js在测试失败时崩溃
- 自动复制index.html中的引用到karma.conf.js中
- Karma Webpack -错误:找不到模块" /test/utilities.js"
- 从JS中运行karma test,不需要配置文件
- Karma.conf.js uncaught referencerror:谷歌没有定义
- Karma-coverage在JS文件中检查测试覆盖率,而不是Angular 2中的TS文件
- Karma JS -如何包括所有的所有来源
- 强制Karma从磁盘中获取更新后的spec.js文件
- Angular.js+Karma+Jasmine:未知服务提供商
- 如何从Gradle运行JS Karma测试