Karma 不是 运行 测试,在 karma-webpack 中有 "import" 语句
Karma not running tests that have "import" statements in karma-webpack
我有一些测试文件,我想 运行 针对我的应用进行测试。
我正在尝试在测试中使用 karma
、karma-webpack
、karma-babel-preprocessor
、karma-chrome-launcher
和 jasmine
。我的应用程序依赖于很多东西,包括 backbone
、marionette
等。我的应用程序是使用 webpack
构建的,我正尝试使用 webpack
将我的文件捆绑在一起以用于测试。 (我一开始想看看能不能跳过这一步,也就是直接import
一个文件来测试,但是现在看来是不可能的。)
我的测试脚本看起来像
package.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/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);
});
});
test/models/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
语句时,karma 将按预期 运行 和 pass/fail。在顶部放置 import
语句将导致 karma 忽略该文件。不会抛出任何错误。
如何使 karma / karma-webpack 运行 我的测试有导入语句/将模块导入我的测试的 karma 安全方法是什么?
当test/models/devicegroup.spec.js没有import
语句时:
// import backbone from 'backbone';
describe("backbone", function () {
it("contains with an expectation", function () {
expect(true).toBe(false);
});
});
终端输出是:(注意少一个测试是运行)
当 test/models/devicegroup.spec.js 确实有一个 import
语句时:
import backbone from 'backbone';
describe("backbone", function () {
it("contains with an expectation", function () {
expect(true).toBe(false);
});
});
终端输出为:
我在 Karma 打开的浏览器中没有看到任何错误。
编辑:
我已经按照 this repo example 将我的源文件添加到我的 karma.conf.js
文件中的 files
和 preprocessors
属性进行了试验。除了测试时间大幅增加外,行为没有任何变化。
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:
为了实验(and based off this person's struggles),我在所有可能的组合中尝试了上面的 karma.conf.js - 只有 files
和 preprocessors
中的测试文件,只有源文件,测试文件in one but not the other,源文件在一个而不是另一个,none,两者。没有好的结果,虽然偶尔会出现新的错误。
有点晚了,但我 运行 遇到了同样的问题,并且搜索了几个小时,为什么我的导入阻止了测试套件的执行。 karma-webpack-4.0.0-rc.2 通过提供 错误消息 !!
带来启示
我的情况是找不到几个模块,angular-mock
、jquery
、angular
等等。
如何修复
将模块放入 karma.config 的文件数组中,例如:
files = [
"node_modules/jquery/dist/jquery.js",
"node_modules/angular/angular.js",
"node_modules/angular-mocks/angular-mocks.js",
{ pattern: "test/**/*.ts", watched: false }
我希望这对某人有所帮助。
编辑
我当前测试相关包的版本:
"@types/jasmine": "^2.8.8",
"jasmine": "^3.2.0",
"jasmine-core": "^3.2.1",
"jasmine-reporters": "2.3.2",
"jasmine-ts": "^0.2.1",
"karma": "3.0.0",
"karma-chrome-launcher": "2.2.0",
"karma-jasmine": "1.1.2",
"karma-junit-reporter": "1.2.0",
"karma-phantomjs-launcher": "1.0.4",
"karma-sourcemap-loader": "^0.3.7",
"karma-spec-reporter": "0.0.32",
"karma-webpack": "^4.0.0-rc.2",
"typescript": "3.0.3",
"webpack": "4.17.2",
"webpack-cli": "^3.1.0",
"webpack-dev-server": "3.1.8"
我有一些测试文件,我想 运行 针对我的应用进行测试。
我正在尝试在测试中使用 karma
、karma-webpack
、karma-babel-preprocessor
、karma-chrome-launcher
和 jasmine
。我的应用程序依赖于很多东西,包括 backbone
、marionette
等。我的应用程序是使用 webpack
构建的,我正尝试使用 webpack
将我的文件捆绑在一起以用于测试。 (我一开始想看看能不能跳过这一步,也就是直接import
一个文件来测试,但是现在看来是不可能的。)
我的测试脚本看起来像
package.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/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);
});
});
test/models/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
语句时,karma 将按预期 运行 和 pass/fail。在顶部放置 import
语句将导致 karma 忽略该文件。不会抛出任何错误。
如何使 karma / karma-webpack 运行 我的测试有导入语句/将模块导入我的测试的 karma 安全方法是什么?
当test/models/devicegroup.spec.js没有import
语句时:
// import backbone from 'backbone';
describe("backbone", function () {
it("contains with an expectation", function () {
expect(true).toBe(false);
});
});
终端输出是:(注意少一个测试是运行)
当 test/models/devicegroup.spec.js 确实有一个 import
语句时:
import backbone from 'backbone';
describe("backbone", function () {
it("contains with an expectation", function () {
expect(true).toBe(false);
});
});
终端输出为:
我在 Karma 打开的浏览器中没有看到任何错误。
编辑:
我已经按照 this repo example 将我的源文件添加到我的 karma.conf.js
文件中的 files
和 preprocessors
属性进行了试验。除了测试时间大幅增加外,行为没有任何变化。
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:
为了实验(and based off this person's struggles),我在所有可能的组合中尝试了上面的 karma.conf.js - 只有 files
和 preprocessors
中的测试文件,只有源文件,测试文件in one but not the other,源文件在一个而不是另一个,none,两者。没有好的结果,虽然偶尔会出现新的错误。
有点晚了,但我 运行 遇到了同样的问题,并且搜索了几个小时,为什么我的导入阻止了测试套件的执行。 karma-webpack-4.0.0-rc.2 通过提供 错误消息 !!
带来启示我的情况是找不到几个模块,angular-mock
、jquery
、angular
等等。
如何修复
将模块放入 karma.config 的文件数组中,例如:
files = [
"node_modules/jquery/dist/jquery.js",
"node_modules/angular/angular.js",
"node_modules/angular-mocks/angular-mocks.js",
{ pattern: "test/**/*.ts", watched: false }
我希望这对某人有所帮助。
编辑
我当前测试相关包的版本:
"@types/jasmine": "^2.8.8",
"jasmine": "^3.2.0",
"jasmine-core": "^3.2.1",
"jasmine-reporters": "2.3.2",
"jasmine-ts": "^0.2.1",
"karma": "3.0.0",
"karma-chrome-launcher": "2.2.0",
"karma-jasmine": "1.1.2",
"karma-junit-reporter": "1.2.0",
"karma-phantomjs-launcher": "1.0.4",
"karma-sourcemap-loader": "^0.3.7",
"karma-spec-reporter": "0.0.32",
"karma-webpack": "^4.0.0-rc.2",
"typescript": "3.0.3",
"webpack": "4.17.2",
"webpack-cli": "^3.1.0",
"webpack-dev-server": "3.1.8"