Capybara/Poltergeist 和 Braintree 测试

Capybara/Poltergeist and Braintree testing

我 运行 在功能测试中使用 Rspec、Capybara 和 Poltergeist 测试我的 Braintree 沙盒支付时遇到错误。我将其设置为完全按照人类在开发中所做的事情(输入付款信息并单击提交)。它在开发中运行良好。但是,当我 运行 我的规格时,我在加载时在付款页面上收到 javascript 错误:

 Capybara::Poltergeist::JavascriptError:
   One or more errors were raised in the Javascript code on the page. If you don't care about these errors, you can ignore them by setting js_errors: false in your Poltergeist configuration (see documentation for details).

   [object Object]
   [object Object]
       at https://js.braintreegateway.com/js/braintree-2.24.0.js:9484 in fallbackError
 # /usr/local/bundle/gems/poltergeist-1.10.0/lib/capybara/poltergeist/browser.rb:365:in `command'
 # /usr/local/bundle/gems/poltergeist-1.10.0/lib/capybara/poltergeist/browser.rb:181:in `click'
 # /usr/local/bundle/gems/poltergeist-1.10.0/lib/capybara/poltergeist/node.rb:17:in `command'
 # /usr/local/bundle/gems/poltergeist-1.10.0/lib/capybara/poltergeist/node.rb:131:in `click'

有没有人 运行 遇到过类似的问题,或者知道为什么 Braintree 的 js 在开发中工作正常时可能会在测试(无头浏览器)中抛出这个错误?

通过查看提到的行,braintree-2.24.0.js:9484,可以看到 Braintree.js 正在通过 console.error 输出错误,因此 Poltergeist 正确地通知您一个 JS 错误。根据您与 Poltergeist 一起使用的 PhantomJS 的发布版本,它最多相当于 5 年前的 Safari 版本,所以大多数情况下,braintree JS 可能不再兼容或需要一两个 polyfill 才能正常运行。您需要调试并尝试弄清楚正在记录的 [object Object] 到底是什么。一种选择是首先切换到 selenium 进行该测试,然后查看错误是否仍然存在。