【问题标题】:jasmine tests, how can I improve the performance?茉莉花测试,如何提高性能?
【发布时间】:2014-11-04 13:57:51
【问题描述】:

我正在使用jasmine 和karma 对我的应用程序进行单元测试,大约有。目前有 1000 个测试,大约需要 10 秒才能完成。

目前这不是问题,但几个月后测试的数量可能会变得更大,我想知道是否有什么可以让它们运行得更快,至少在本地运行。

我发现使用:

jasmine.any(Object)

比比较大对象快得多。

变化:

expect(some.method).toHaveBeenCalledWith("xyz");

进入:

expect(some.method.calls.argsFor(0)[0]).toBe("xyz");

似乎也快了一点。

Karma 很可爱,但它似乎还没有任何可以提高性能的东西,不过它对调试非常有用 (reportSlowerThan)。

还有什么其他想法可以提高测试的性能吗?

【问题讨论】:

    标签: javascript performance unit-testing jasmine


    【解决方案1】:

    从toHaveBeenCalledWith 切换后,您看到了哪些性能改进?

    我很欣赏你想要实现的目标——你有一个运行 10 秒的测试套件,你尝试改进这种情况是正确的——但如果节省的时间在

    toHaveBeenCalledWith 比argsFor 方法更能将你的意图传达给他人,如果测试失败则会显示消息;

    使用“xyz”调用的预期函数

    对比

    预计未定义为“xyz”


    话虽如此,一些想法......

    1

    寻找可以安全替换beforeEach 呼叫的区域;

    beforeEach 函数在调用它的描述中的每个规范之前调用一次

    与beforeAll 通话;

    beforeAll 函数在 describe 中的所有规范运行之前只调用一次。

    但请注意不要在测试之间引入共享状态,这可能会影响您的结果(使用 Jasmine 的选项以随机顺序运行测试可能会有所帮助,但我不确定 beforeAll 是如何处理的,它可能是那些规范仍然一起运行)。

    2

    像以前一样继续使用reportSlowerThan,并挑选出任何真正慢的。如果您建议的更改是不可避免的,请将它们放在名称选择良好的辅助函数后面,以便其他开发人员仍然清楚您要实现的目标。或者更好的是,为他们创建自定义匹配器,因为如果测试失败,这也会导致明确的消息(add-matchers 可以帮助简化此操作)。

    3

    考虑从 Jasmine 切换到 Jest,测试的编写方式几乎相同,但测试运行程序要快得多。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-10
      • 1970-01-01
      相关资源
      最近更新 更多