0

我参与了一个为 Javascript 提供突变测试的 OSS 项目——基本上是通过改变单元测试测试的代码来测试单元测试的有效性。

变异代码的一个不可避免的影响是您可能会遇到无限循环:

while(var i=0; i<10; i++){...}

可能成为

while(var i=0; i<10; i--){...}

虽然可以排除一些基本突变(例如这个),但不可能(也不希望)排除每个可能导致无限循环的突变。相反,我一直专注于检测无限循环,以警告终止当前的突变测试并继续下一个突变。

然而,在 Karma 中,我遇到了一个问题:像上面这样的循环将保持浏览器被占用并将你的 CPU 发送到 100%。当我尝试关闭 Karma 服务器时,出现以下错误:

Fatal error: socket hang up
Process finished with exit code 3

这不仅会杀死我的父进程,从而使所有剩余的突变都未经测试,而且还会使子进程(我正在运行一个小型业力服务器实例池)悬空,然后我必须手动杀死它。

我已经为此苦苦挣扎了很长一段时间,感觉就像撞到了一堵混凝土墙。很感谢任何形式的帮助。

如何重现?

如果您想了解更多信息/上下文,请随时在https://github.com/jimivdw/grunt-mutation-testing/tree/kill_looping_karma_servers查看项目

在那个分支中,我有一个名为script_endlessLoop.js的文件,当它发生变异时,会在很多情况下导致无限循环。我现在通过添加@excludeMutations 禁用了突变,因此需要删除或修改。然后运行grunt test:karma应该会给你上述错误。 请小心!确保在运行此程序后清理所有与节点相关的进程,因为它可能会导致您的计算机严重减速

4

0 回答 0