gpt4 book ai didi

javascript - Jasmine 测试,如何提高性能?

转载 作者:行者123 更新时间:2023-12-02 04:52:22 25 4
gpt4 key购买 nike

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

现在这不是问题,但是在接下来的几个月中,测试的数量可能会变得更大,我想知道是否有什么办法可以使它们至少在本地运行得更快。

我发现使用:

jasmine.any(Object)

比比较大对象要快得多。

变更:
expect(some.method).toHaveBeenCalledWith("xyz");

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

似乎也快一点。

Karma很可爱,但是它似乎还没有任何可以提高性能的东西,尽管它确实对调试很有用( reportSlowerThan)。

还有其他想法如何改善测试性能?

最佳答案

toHaveBeenCalledWith切换时,您看到什么样的性能改进?

我很感激您要达到的目标-您有一个运行10秒的测试套件,并且可以尝试改善这种情况-但是,如果节省的时间在<500ms范围内,我将非常小心,因为它的可读性和清晰度您的测试面临风险。
toHaveBeenCalledWith可以比argsFor方法更好地向他人传达您的意图,如果测试失败,则会显示消息。

Expected function to have been called with "xyz"





Expected undefined to be "xyz"



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

1个

寻找可以安全地替换 beforeEach调用的区域;

The beforeEach function is called once before each spec in the describe in which it is called



使用 beforeAll调用;

The beforeAll function is called only once before all the specs in describe are run.



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

2

像往常一样继续使用 reportSlowerThan,并选择所有确实很慢的代码。如果不可避免地发生像您建议的那样的更改,请将其放在具有精心选择的名称的辅助函数之后,以便其他开发人员仍然可以清楚地知道要实现的目标。或更好的办法是为它们创建“自定义匹配器”,因为如果测试失败,这也将导致清晰的消息( add-matchers可以使此过程变得更容易)。

3

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

关于javascript - Jasmine 测试,如何提高性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26736974/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com