Karma没有在karma-webpack中运行具有"import"语句的测试

Cal*_*Jay 6 javascript karma-runner karma-jasmine webpack 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",
Run Code Online (Sandbox Code Playgroud)

其余的文件:

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
  })
}
Run Code Online (Sandbox Code Playgroud)

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);
    });
});
Run Code Online (Sandbox Code Playgroud)

test/models/devicegroup.spec.js看不到此文件

import backbone from 'backbone';

describe("backbone", function () {
    it("containsasdfasdfasdfasdfspec with an expectation", function () 
  {
        expect(true).toBe(false);
    });
});
Run Code Online (Sandbox Code Playgroud)

我的文件夹结构是:

- karma.conf.js
- test/
- - test.spec.js
- - models/
- - - devicegroup.spec.js
- public/
- - js/
- - - app.js
Run Code Online (Sandbox Code Playgroud)

当我的文件import顶部没有语句时,业力将按预期运行并传递/失败.import在顶部放置一个语句将导致业力忽略该文件.没有错误被抛出.

我如何让karma/karma-webpack运行我的测试,这些测试具有import语句/什么是将模块导入我的测试的业力安全方法?

test/models/devicegroup.spec.js没有import语句时:

// import backbone from 'backbone';

describe("backbone", function () {
    it("contains with an expectation", function () {
        expect(true).toBe(false);
    });
});
Run Code Online (Sandbox Code Playgroud)

终端输出是:(注意少运行一次测试)

终端输出karma的屏幕截图成功运行没有import语句的文件测试

test/models/devicegroup.spec.js确实有一个import语句时:

import backbone from 'backbone';

describe("backbone", function () {
    it("contains with an expectation", function () {
        expect(true).toBe(false);
    });
});
Run Code Online (Sandbox Code Playgroud)

终端输出是:

当无法查看带有import语句的文件时,karma的终端输出的屏幕截图

我看到Karma打开的浏览器没有错误.

编辑:

我已经加入我的源文件的试验filespreprocessors属性,在我的karma.conf.js文件,按照该回购例子.除了大量增加的测试时间之外,行为没有变化.

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'],
},
Run Code Online (Sandbox Code Playgroud)

EDIT2:为了实验的缘故(以及基于关闭此人的斗争),我试图在每一个可能的组合上面karma.conf.js -只有在测试文件filespreprocessors,只有源文件,测试文件中的一个而不是其他,源文件在一个但不是另一个,没有,两者.没有好的结果,虽然偶尔会出现新的错误.

sci*_*per 5

有点晚了,但我遇到了同样的问题,并且搜索了几个小时,为什么我的导入阻止了测试套件的执行。karma-webpack-4.0.0-rc.2 通过提供错误信息带来了启示!!

我在我的情况下,几个模块,在那里没有找到,angular-mockjqueryangular等等。

怎么修

将这些模块放入 karma.config 中的 files 数组,例如:

files = [
  "node_modules/jquery/dist/jquery.js",
  "node_modules/angular/angular.js",
  "node_modules/angular-mocks/angular-mocks.js",
  { pattern: "test/**/*.ts", watched: false }
Run Code Online (Sandbox Code Playgroud)

我希望这可以帮助别人。

编辑

我当前版本的测试相关软件包:

"@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"
Run Code Online (Sandbox Code Playgroud)