我有一些测试文件,其中包含我想针对我的应用程序运行的测试。
我正在尝试使用karma
, karma-webpack
, karma-babel-preprocessor
, karma-chrome-launcher
, and jasmine
在我的测试中。我的应用程序取决于很多因素,包括backbone
, marionette
等等。我的应用程序是使用构建的webpack
,我正在尝试使用webpack
将我的文件捆绑在一起进行测试。 (我最初想看看是否可以跳过这一步,即简单地import
要测试的文件,但这似乎是不可能的。)
我的测试脚本看起来像
包.json(脚本部分)
"test": "./node_modules/karma/bin/karma start",
其余文件:
karma.conf.js
var webpackConfig = require('./config/webpack/webpack.test.conf.js');
module.exports = function(config) {
config.set({
basePath: '',
frameworks: ['jasmine'],
files: [
{ pattern: 'test/**/*.spec.js', watched: true },
{ pattern: 'test/*.spec.js', watched: true }
],
exclude: [
],
preprocessors: {
'test/**/*.spec.js': ['webpack'],
'test/*.spec.js': ['webpack']
},
webpack: webpackConfig,
webpackMiddleware: {
stats: 'errors-only'
},
reporters: ['progress'],
port: 9876,
colors: true,
logLevel: config.LOG_INFO,
autoWatch: true,
browsers: ['Chrome'],
singleRun: false,
concurrency: Infinity
})
}
测试/test.spec.js看到这个文件
describe("A suite", function () {
it("contains spec with an expectation", function () {
expect(true).toBe(true);
});
});
describe("Another suite", function () {
it("contains another spec with an expectation", function () {
expect(true).toBe(false);
});
});
测试/模型/devicegroup.spec.js没有看到这个文件
import backbone from 'backbone';
describe("backbone", function () {
it("containsasdfasdfasdfasdfspec with an expectation", function ()
{
expect(true).toBe(false);
});
});
我的文件夹结构是:
- karma.conf.js
- test/
- - test.spec.js
- - models/
- - - devicegroup.spec.js
- public/
- - js/
- - - app.js
当我的文件没有import
顶部的声明,业力将按预期运行并通过/失败。放一个import
顶部的语句将导致 karma 忽略该文件。不会抛出任何错误。
如何使 karma / karma-webpack 运行具有导入语句的测试/将模块导入到我的测试中的 karma 安全方法是什么?
When 测试/模型/devicegroup.spec.js没有import
陈述:
// import backbone from 'backbone';
describe("backbone", function () {
it("contains with an expectation", function () {
expect(true).toBe(false);
});
});
终端输出是:(注意少运行了一项测试)
When 测试/模型/devicegroup.spec.js确实有一个import
陈述:
import backbone from 'backbone';
describe("backbone", function () {
it("contains with an expectation", function () {
expect(true).toBe(false);
});
});
终端输出是:
我在 Karma 打开的浏览器中没有看到任何错误。
EDIT:
我已经尝试将我的源文件添加到files
and preprocessors
我的属性karma.conf.js
文件,按照这个回购示例 https://bitbucket.org/knee-cola/webpack-karma/src/36a86afda677?at=master。除了测试时间大幅增加之外,行为没有任何变化。
karma.conf.js
files: [
{ pattern: 'public/js/**/*.js', watched: true},
{ pattern: 'test/**/*.spec.js', watched: true },
// each file acts as entry point for the webpack configuration
],
preprocessors: {
// add webpack as preprocessor
'public/js/**/*.js': ['webpack'],
'test/**/*.spec.js': ['webpack'],
},
编辑2:
为了实验的目的(并基于这个人的挣扎 https://stackoverflow.com/questions/46271962/karma-webpack-jasmine-unit-testing-not-working),我已经在每种可能的组合中尝试了上述 karma.conf.js - 仅测试文件files
and preprocessors
,只有源文件,测试文件在一个中,但不在另一个中,源文件在一个中,但不在另一个中,无,两者都有。没有好的结果,尽管偶尔会出现新的错误。