Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/471.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何调试随机故障?_Javascript_Ruby_Debugging_Cucumber - Fatal编程技术网

Javascript 如何调试随机故障?

Javascript 如何调试随机故障?,javascript,ruby,debugging,cucumber,Javascript,Ruby,Debugging,Cucumber,我遇到了cucumber测试套件的问题,我想不出任何调试方法 我们有一套相当大的cucumber特性,所有这些特性都传递到开发机器上。问题是,当我们在ci服务器上运行整个cucumber套件时,有两个场景失败了,当场景尝试填充表单(显然不在页面上)时,单独运行它们会使它们随机通过和失败(显然)。由于随机失败,我认为这是ajax请求的时间问题,但事实并非如此,因为添加真正的大睡眠(尝试了从1到60秒的所有方法)不会改变任何事情。这个场景更有趣,因为还有另外3个场景在以相同的顺序运行第一个场景中失败

我遇到了cucumber测试套件的问题,我想不出任何调试方法

我们有一套相当大的cucumber特性,所有这些特性都传递到开发机器上。问题是,当我们在ci服务器上运行整个cucumber套件时,有两个场景失败了,当场景尝试填充表单(显然不在页面上)时,单独运行它们会使它们随机通过和失败(显然)。由于随机失败,我认为这是ajax请求的时间问题,但事实并非如此,因为添加真正的大睡眠(尝试了从1到60秒的所有方法)不会改变任何事情。这个场景更有趣,因为还有另外3个场景在以相同的顺序运行第一个场景中失败的相同步骤,并且这些都通过了,除非我删除了第一个场景,在这种情况下,第一个运行这些步骤的场景就是失败的场景

有什么技巧可以在cucumber上调试这种奇怪的行为吗?特性(请记住,这些场景总是在开发人员机器上传递,问题在于ci服务器)


谢谢

我也有机会调试仅在CI上重现的间歇性测试失败。根据我的经验,这个问题总是归结为几个基本原因:

  • 比赛条件在前端。例如,在xhr回调之前为输入启用表单会添加默认值
  • “乐观”写在前端。有时,前端工程师会忽略结果,从而使涉及PUT/POST请求的操作更具响应性。在这种情况下,无法让Cucumber等待请求完成,因此针对数据库中状态更改的测试将与应用程序竞争
  • 对测试夹具中不可用的资源的请求。例如,对第三方API的请求可能会被CI阻止。有时URL在测试环境中构造不正确,特别是当它们是“手动”而不是使用Rails帮助程序时

  • 间歇性故障总是很难调试。不要放弃!这是值得的努力,以找出如何建立一个可测试的,无种族的前端。您可以使用capybara webkit调试仅限CI的故障。让javascript控制台输出在CI上打印出来,然后可以向javascript添加打印以跟踪其状态直到测试失败。您还可以破解capybara webkit,打印出前端请求的相关信息。这里有一个例子:

    很抱歉,这个标题太离题了。XDI尝试将驱动程序更改为capybara webkit(我们以前使用的是poltergeist),并且以前间歇性失败的功能不再失败。我想这一定是恶鬼的一个错误,但我不太清楚到底发生了什么。不过谢谢你的提示,我会注意这类事情的。