茉莉花测试,我该如何提高性能?

时间:2014-11-04 13:57:52

标签: javascript performance unit-testing jasmine

我正在使用jasminekarma进行应用的单元测试,大约有。目前进行了1000次测试,大约需要10秒才能完成。

现在这不是问题,但是在几个月内,测试的数量可能会变得更大,我想知道我能做些什么来让它们更快地运行,至少在本地运行。

我发现使用:

jasmine.any(Object)

比比较大对象要快得多。

更改:

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

成:

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

似乎也快了一点。

Karma很可爱,但它似乎没有任何改善性能的东西,但它对于调试(reportSlowerThan)非常有用。

任何其他想法如何才能提高测试的性能?

1 个答案:

答案 0 :(得分:0)

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

我很欣赏你想要实现的目标 - 你有一个运行10秒钟的测试套件,而你正确地尝试改善这种情况 - 但是如果节省的话是< 500ms范围我会小心,因为测试的可读性和清晰度受到威胁。

toHaveBeenCalledWithargsFor方法更好地将您的意图传达给他人,如果该测试失败则显示的消息也是如此;

  

使用" xyz"

调用的预期函数

vs

  

预期未定义为" xyz"

据说,有些想法......

1

查找可以安全地替换beforeEach来电的区域;

  

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

beforeAll次来电;

  

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

但要注意不要在测试之间引入可能会导致结果偏差的共享状态(使用Jasmine' s选项以随机顺序运行测试可能对此有所帮助,但我不确定如何{{1}由此处理,可能是那些规格仍在一起运行。)

2

继续使用beforeAll,并选择真正慢的任何内容。如果像您建议的更改是不可避免的,请将它们放在具有精心选择的名称的辅助函数之后,以便您尝试实现的内容对于其他开发人员来说仍然是清楚的。或者更好的是,为他们创建自定义匹配器,因为如果测试失败,这也会产生清晰的消息(add-matchers可以帮助简化这一过程。)

3

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