使用Karma,Jasmine和karma-browserify重新加载所需的模块

时间:2015-10-05 21:24:58

标签: unit-testing karma-runner browserify karma-jasmine

我正在开展一个相当大的项目,我们曾经使用Jest进行单元测试。我们决定迁移到Karma + Jasmine,因为Jest虽然有一些专业人员,但是对我们的需求来说太慢了,有时会使我们的持续集成服务器崩溃,对资源的要求比对应。

Jest的一大优势是它为每个测试重建了一个孤立的环境。可以在beforeEach挂钩中需要一个模块,然后再次运行模块的代码。另一个优点是自动模拟所有模块。使用KarmaJasmine,您有时需要追踪副作用,以尽量减少不良行为。

至于KarmaJasmine,相比之下它更快,文件观看功能使我们能够进行有效的TDD,其他开发团队很高兴我们不再崩溃我们的CI服务器。

回到我的问题......

我想知道是否可以清除require缓存"在每次测试运行之前。我知道browserify如何运作以及require是如何完成的,但我很高兴知道你们中的一些人是如何成功解决这个问题的。它实际工作的方式,一个新的测试可以打破旧的测试,因为它修改了环境,这是非常糟糕的。

我尝试了rewireify,但它似乎与watchify(由karma-browserify使用)配合得很好,并且修改过的模块没有正确重新加载所有重新启动的模块在内存中都有不同的引用,这使我们无法使用autoWatch和正确的TDD。

1 个答案:

答案 0 :(得分:0)

这似乎是一个网络风暴的错误 here you can see it

在那里,我找到了一个适合我的解决方案。

  1. 修改此文件(在osX中):
  2. /Applications/WebStorm.app/Contents/plugins/js-karma/js_reporter/karma-intellij/lib/intellijRunner.js

    1. 将刷新属性修改为true,如下所示:
    2. runWithConfig({ port: serverPort, refresh: true, //<-- This urlRoot: urlRoot });