繁体   English   中英

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

[英]How can I force Karma to restart the browser in between each test?

我有一组在构建服务器上运行的Jasmine单元测试。 我设法使Karma正常运行,以便每次我进入开发分支时,我的测试都可以在Chrome,Edge和Firefox上自动运行。

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

我不认为Karma支持在两次测试之间重新启动浏览器。 有许多障碍需要克服:

  1. 为了做您想做的事情,Karma必须在完成一个测试后保存测试运行器的状态,重新启动浏览器,然后以一种允许其知道哪个测试是新的方式在新的浏览器中调用测试运行器。下一个。 AFAIK,业力(Karma)没有足够的机械。 我对茉莉花不是很熟悉,但我也不认为它支持这一点。

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

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

    B.它再次运行beforeAll ,这实际上将其转换为beforeEach 是否导致问题取决于您的项目。 将某些代码放入beforeAll而不是beforeEach因为它运行起来相当昂贵,因此将beforeAll转换为beforeEach可能会非常昂贵。

仍然存在一个问题,即重新启动浏览器本身就是一项昂贵的操作,并且会大大降低套件的速度。

我遇到了一些我想要新的浏览器的情况。 我通过以下方法解决了该问题:

  1. 将待测代码加载到iframe 这将创建一个新的Window对象,因此您可以隔离特定于Window数据。 例如,我已经使用它来测试与onerroronbeforeunload代码。

  2. 我使用了DOM提供的API在两次测试之间进行清理。 举例来说,我已经确保了测试使用的测试代码localStorage不通过清除受其他检查localStorage测试之间。

我还没有碰到那里没有 启动一个新的浏览器实例中的其他解决方案的情况下。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM