testing - 如何在 webpack 中集成 karma

标签 testing tdd karma-runner webpack webpack-dev-server

我是一个 webpack 新手,有一个关于测试的问题。

我有一个使用 webpack、typescript 和 karma 作为测试运行器的项目,我想在每次文件更改时运行我的测试(例如,在“监视”模式下)

我知道 karma-webpack 并且当我将 karma 作为自己的进程运行时它运行良好(karma start ...)

但我想要的是在 webpack 流程中集成 karma。 因此,从我天真的角度来看,我认为 karma 必须在 webpack 的预加载(例如 linter)中定义。

但是我什么也没找到.... 我无法相信这种通用的工作流程是不可能的(对每个源更改运行测试)

你们中的任何人都可以给我一个建议吗?

最佳答案

时间过得真快,转眼就到了 2018 年 6 月。由于网上没有太多关于此的文档,我想捐出我的 2 美分。

我目前有一个工作设置,我将我的测试与 webpack 捆绑在一起,监视更改以便自动重新运行测试。

我正在使用 karma-webpack使用 Alternative usage 中解释的配置部分,我认为这是解决问题中提出的问题的正确方法。

karma.conf.js

{
  ...
  files: [
    // only specify one entry point
    // and require all tests in there
    'test/index_test.js'
  ],
  preprocessors: {
    // add webpack as preprocessor
    'test/index_test.js': [ 'webpack' ]
  },
  ...
}

测试/index_test.js

// require all modules ending in "_test" from the
// current directory and all subdirectories
const testsContext = require.context(".", true, /_test$/)

testsContext.keys().forEach(testsContext)

在我看来,按照@Adi Prasetyo 的建议观察整个包的变化是错误的。我们应该只关注测试文件和导入其中的文件的变化,这可以通过最后一个 URL 中显示的配置来实现。

对于热重载的工作非常重要(至少在我的情况下它是它工作的原因),你需要设置 webpack-dev-middleware 配置以便每次在某些测试文件中发生更改时更新测试包或在其中导入的文件。这是我正在使用的配置:

karma.config.js

{
  ...
  webpackMiddleware: {
    watchOptions: {
      aggregateTimeout: 300,
      poll: 1000, // customize depending on PC power
    },
  },
  ...
}

更多信息here .

关于testing - 如何在 webpack 中集成 karma,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34680143/

相关文章:

ruby-on-rails - Rails Controller 中的功能测试重定向

javascript - 如何禁用 TestCafe cookie 处理机制以允许默认浏览器 document.cookie 列表?

ruby-on-rails - BDD with Cucumber 和 rspec - 什么时候这是多余的?

javascript - Karma basePath 默认为 C :\

unit-testing - 如何在 karma angularjs 中对 setInterval 进行单元测试

selenium - 是否可以使用 Selenium WebDriver 运行回归?

ruby - Rails 3.0.12 性能测试问题

macos - 如何测试 IOKit 用户空间驱动程序开发?

c# - Visual Studio 中的 TestContext - 它有什么作用?

javascript - 使用 Jasmine (无后端测试)单独手动调试 Angular Directive(指令)