Capybara:测试JavaScript运行没有错误

Nie*_* B. 8 ruby-on-rails capybara

我想写一个请求规范,验证在给定页面上加载和执行javascript没有任何错误.

我知道我可以在我的JavaScript文件的末尾添加一些东西并断言这些内容的存在,但这感觉就像一个黑客,并迫使我污染我的代码以进行测试.我更愿意做一些事情.

visit some_path
page.should succesfully_run_javascript
Run Code Online (Sandbox Code Playgroud)

小智 3

一种可能污染不太严重的方法是通过在 head 中添加类似的内容来收集任何错误(请记住,这将覆盖您可能已经拥有的任何 onerror 处理程序):

<script>
    window.errors = [];
    window.onerror = function(error, url, line) {
        window.errors.push(error);
    };
</script>
Run Code Online (Sandbox Code Playgroud)

然后你可以做类似的事情:

page_errors = page.evaluate_script('window.errors')
Run Code Online (Sandbox Code Playgroud)

并断言数组为空。否则你可以输出错误......

注意:将 scriptlet 添加到 head(可能作为第一个 scriptlet/script 标签)非常重要,因为它需要成为第一个执行的脚本。