【问题标题】:Karma not running tests that have "import" statements in karma-webpackKarma 没有运行在 karma-webpack 中有“import”语句的测试
【发布时间】:2018-06-05 21:27:34
【问题描述】:

我有一些测试文件,其中包含我想针对我的应用运行的测试。

我正在尝试在我的测试中使用karmakarma-webpackkarma-babel-preprocessorkarma-chrome-launcherjasmine。我的应用程序依赖于很多东西,包括backbonemarionette 等。我的应用程序是使用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 语句时,业力将按预期运行并通过/失败。在顶部放置 import 语句将导致 karma 忽略该文件。没有错误被抛出。

如何让 karma / karma-webpack 运行包含 import 语句的测试 / 将模块导入测试的 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 文件中的filespreprocessors 属性。除了大量增加测试时间外,行为没有任何变化。

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 - 仅测试 filespreprocessors 中的文件,仅源文件,一个中的测试文件,而不是另一个中的测试文件, 源文件在一个但不是另一个,没有,两者都有。没有好的结果,虽然偶尔会出现新的错误。

【问题讨论】:

  • 您是否注意到框架:['jasmine'],{模式:'test/**/*.spec.js',观看:true },{模式:'test/models/*. spec.js', seen: true } ] 缺少一个方括号(或者有一个额外的,不确定)?
  • 这可能是一个复制/粘贴工件,我在我的代码编辑器中没有看到它......虽然让我仔细看一下,但请稍等
  • 感谢您指出,这是一个复制/粘贴错误,上面的代码现在完全反映了我在本地拥有的内容
  • 你有没有找到解决这个问题的方法,因为我也遇到了同样的事情。
  • 不,我改用 Jest。

标签: javascript webpack karma-jasmine karma-runner karma-webpack


【解决方案1】:

有点晚了,但我遇到了同样的问题,并且搜索了几个小时,为什么我的导入阻止了测试套件的执行。 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 }

我希望,这对某人有所帮助。

编辑

我目前测试相关包的版本:

"@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"

【讨论】:

  • 是的,我很抱歉耽搁了?
  • 别这样!您已经尽自己的一份力量解决了互联网上几乎无限数量的未回答问题。 xkcd.com/979
猜你喜欢
  • 2019-06-17
  • 2013-08-24
  • 2015-09-11
  • 2018-10-04
  • 1970-01-01
  • 2016-12-25
  • 1970-01-01
  • 2014-07-29
  • 2019-01-08
相关资源
最近更新 更多