【发布时间】:2015-07-03 21:03:20
【问题描述】:
我一直在为我的用户注册页面编写自动化测试而发疯。用户将通过 Stripe 支付定期订阅费用。他们在同一张表格中输入他们的基本信息(电子邮件、密码等)和信用卡信息,然后发生以下流程:
- (在客户端)stripe.js 向 Stripe 的服务器发出 AJAX 请求,该服务器(假设一切都有效)返回一个信用卡令牌。
- 我的 javascript 使用信用卡令牌填充 HTML 表单中的隐藏输入,并将表单提交到我的 Rails 服务器。
- (现在在服务器端):我验证用户的基本详细信息。如果它们无效,请返回(因为如果他们的电子邮件地址无效,那么通过 Stripe 向他们收费是没有意义的,因此他们无论如何都无法创建帐户。)
- 如果它们有效,请尝试创建一个
Stripe::Customer对象,添加正确的订阅并使用 Stripe 的 ruby gem 等向它们收费。
所有这些都非常好......除了我不知道如何测试它。测试步骤 #4 非常简单,因为它发生在服务器端,所以我可以使用 VCR 之类的 gem 模拟 Stripe 调用。
第 1 步给我带来了麻烦。我尝试使用puffing-billy 和stripe-ruby-mock gem 对此进行测试,但没有任何效果。这是我自己的 javascript(简化):
var stripeResponseHandler = function (status, response) {
console.log("response handler called");
if (response.error) {
// show the errors on the form
} else {
// insert the token into the form so it gets submitted to the server
$("#credit_card_token").val(response.id);
// Now submit the form.
$form.get(0).submit();
}
}
$form.submit(function (event) {
// Disable the submit button to prevent repeated clicks
$submitBtn.prop("disabled", true);
event.preventDefault();
console.log("creating token...");
Stripe.createToken(
// Get the credit card details from the form
// and input them here.
}, stripeResponseHandler);
// Prevent the form from submitting the normal way.
return false;
});
重申一下,当我手动测试时,这一切都很好。但是我的自动化测试失败了:
Failure/Error: expect{submit_form}.to change{User.count}.by(1)
expected result to have changed by 1, but was changed by 0
当我尝试使用 gem puffing-billy 时,它似乎正在缓存 stripe.js 本身(它是从 Stripe 自己的服务器在 js.stripe.com 加载的,而不是从我自己的应用程序中提供的,因为 Stripe 不支持这个.),但Stripe.createToken 发起的调用没有被缓存。事实上,当我登录到我的 Stripe 服务器日志时,似乎甚至没有进行调用(或者至少 Stripe 没有收到它。)
请注意上面我的 JS 中的那些 console.log 语句。当我运行我的测试套件时,“正在创建令牌...”这一行被打印出来,但“响应处理程序被调用”。没有。看起来响应处理程序从未被调用过。
我省略了一些细节,因为这个问题已经很长了,但可以根据要求添加更多内容。我在这里做错了什么?如何测试我的注册页面?
更新请参阅 stripe-ruby-mock 上的 [我对这个 Github 问题的评论],了解有关我尝试和失败的更多信息。
【问题讨论】:
-
您的功能规范是什么样的?
-
您在 JS 控制台中看到任何错误吗?
-
另外,我没有找到
Stripe.createToken的任何信息,不应该是Stripe.card.createToken吗? -
Stripe.createToken肯定存在,就像我说的那样,当我手动测试它时,这一切都有效,我只是在努力为它编写一个自动化测试。
标签: ruby-on-rails testing capybara stripe-payments poltergeist