gpt4 book ai didi

javascript - 我如何强制 Karma 在每次测试之间重新启动浏览器?

转载 作者:行者123 更新时间:2023-11-29 21:00:57 25 4
gpt4 key购买 nike

我有一组在构建服务器上运行的 Jasmine 单元测试。我已经设法让 Karma 很好地工作,所以每次我推送到我的开发分支时,我的测试都会自动在 Chrome、Edge 和 Firefox 上运行。

但是,我担心我的测试不是独立的,因为大部分浏览器状态(例如全局 JS、DOM 和本地存储)在测试之间持续存在。在某些情况下,我发现由于先前测试的行为,这允许测试通过,这对我来说是一种不好的做法。我想做的是强制浏览器在每次测试之间重新启动,从而创建一个新的、独立的测试环境。这可能吗?

最佳答案

我认为 Karma 不支持在测试之间重启浏览器。需要克服多个障碍:

  1. 为了做你想做的事,Karma 必须在完成一个测试后保存测试运行器的状态,重新启动浏览器,然后以一种允许的方式在新浏览器中调用测试运行器它知道接下来是哪个测试。 AFAIK,Karma 没有这方面的机器。我对 Jasmine 不是很熟悉,但我认为它也不支持这一点。

  2. 它会破坏设置和拆卸代码的语义。如果您使用 beforeAll Hook ,那么在浏览器的第二个实例中运行测试时,测试运行器应该做什么?

    一个。它不会再次运行 beforeAll。例如,如果它负责通过添加元素来初始化 DOM,则此初始化不会完成。那是不可行的。

    B.它再次运行 beforeAll,这有效地将它变成了 beforeEach。这是否会导致问题取决于您的项目。一些代码被放入 beforeAll 而不是 beforeEach 因为它运行起来相当昂贵,将 beforeAll 变成 beforeEach可能会非常昂贵。

还有一个问题是,重新启动浏览器本身是一项代价高昂的操作,并且会大大降低套件的速度。

我遇到过我想要一个新的浏览器的情况。我已经通过以下方式解决了这个问题:

  1. iframe 中加载被测代码。这会创建一个新的 Window 对象,因此您可以隔离 Window 特定的数据。例如,我用它来测试与 onerroronbeforeunload 混淆的代码。

  2. 我使用 DOM 提供的 API 在我的测试之间进行清理。例如,我通过在测试之间清除 localStorage 来确保使用 localStorage 测试代码的测试不会受到其他测试的影响。

除了启动新的浏览器实例之外,我还没有遇到没有解决方案的情况。

关于javascript - 我如何强制 Karma 在每次测试之间重新启动浏览器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46526510/

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