- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一直在努力为我的用户注册页面编写自动化测试。将通过 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
语句。当我运行我的测试套件时,“creating token...”这一行被打印出来,但是“response handler called”。没有。看起来响应处理程序从未被调用。
我省略了一些细节,因为这个问题已经很长了,但可以根据要求添加更多。我在这里做错了什么?如何测试我的注册页面?
更新请参阅 stripe-ruby-mock 上的[我对此 Github 问题的评论],了解有关我尝试过和失败的内容的更多信息。
最佳答案
如果我没理解错的话...
Capybara 不会知道您的 ajax 请求。您应该能够使用 Sinatra 来排除 AJAX 请求。让它返回一个与 VCR 非常相似的固定装置。
这是一篇关于它的文章。
https://robots.thoughtbot.com/using-capybara-to-test-javascript-that-makes-http
您需要在 Capybara 中启动 Sinatra 应用程序,然后匹配您的 ajax 调用中的 URL。
类似于:
class FakeContinousIntegration < Sinatra::Base
def self.boot
instance = new
Capybara::Server.new(instance).tap { |server| server.boot }
end
get '/some/ajax'
# send ajax back to capybara
end
end
当你启动服务器时,它会返回你可以写入到你的js可以使用的配置的地址和端口。
@server = App.boot
然后我使用地址和端口来配置 JS 应用
def write_js_config
config['api'] = "http://#{@server.host}:#{@server.port}"
config.to_json
end
在 spec_helper.rb
中将配置发送到 js,以便您的脚本指向您的 sinatra 应用程序。我的是用 gulp 编译的。所以我只是在测试运行之前将配置构建到 is 中:
system('gulp build --env capybara')
关于ruby-on-rails - 如何使用 poltergeist 和 Capybara 测试 Stripe.js?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29861371/
我正在学习构建单页应用程序 (SPA) 所需的所有技术。总而言之,我想将我的应用程序实现为单独的层,其中前端仅使用 API Web 服务(json 通过 socket.io)与后端通信。前端基本上是
当我看到存储在我的数据库中的日期时。 这是 正常 。日期和时间就是这样。 但是当我运行 get 请求来获取数据时。 此格式与存储在数据库 中的格式不同。为什么会发生这种情况? 最佳答案 我认为您可以将
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我正在尝试使用backbone.js 实现一些代码 和 hogan.js (http://twitter.github.com/hogan.js/) Hogan.js was developed ag
我正在使用 Backbone.js、Node.js 和 Express.js 制作一个 Web 应用程序,并且想要添加用户功能(登录、注销、配置文件、显示内容与该用户相关)。我打算使用 Passpor
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 8 年前。 Improve this ques
我尝试在 NodeJS 中加载数据,然后将其传递给 ExpressJS 以在浏览器中呈现 d3 图表。 我知道我可以通过这种方式加载数据 - https://github.com/mbostock/q
在 node.js 中,我似乎遇到了相同的 3 个文件名来描述应用程序的主要入口点: 使用 express-generator 包时,会创建一个 app.js 文件作为生成应用的主要入口点。 通过 n
最近,我有机会观看了 john papa 关于构建单页应用程序的精彩类(class)。我会喜欢的。它涉及服务器端和客户端应用程序的方方面面。 我更喜欢客户端。在他的实现过程中,papa先生在客户端有类
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我是一个图形新手,需要帮助了解各种 javascript 2D 库的功能。 . . 我从 Pixi.js 中得到了什么,而我没有从 Konva 等基于 Canvas 的库中得到什么? 我从 Konva
我正在尝试将一些 LESS 代码(通过 ember-cli-less)构建到 CSS 文件中。 1) https://almsaeedstudio.com/ AdminLTE LESS 文件2) Bo
尝试查看 Express Passport 中所有登录用户的所有 session ,并希望能够查看当前登录的用户。最好和最快的方法是什么? 我在想也许我可以在登录时执行此操作并将用户模型数据库“在线”
我有一个 React 应用程序,但我需要在组件加载完成后运行一些客户端 js。一旦渲染函数完成并加载,运行与 DOM 交互的 js 的最佳方式是什么,例如 $('div').mixItUp() 。对
请告诉我如何使用bodyparser.raw()将文件上传到express.js服务器 客户端 // ... onFilePicked(file) { const url = 'upload/a
我正在尝试从 Grunt 迁移到 Gulp。这个项目在 Grunt 下运行得很好,所以我一定是在 Gulp 中做错了什么。 除脚本外,所有其他任务均有效。我现在厌倦了添加和注释部分。 我不断收到与意外
我正在尝试更改我的网站名称。找不到可以设置标题或应用程序名称的位置。 最佳答案 您可以在 config/ 目录中创建任何文件,例如 config/app.js 包含如下内容: module.expor
经过多年的服务器端 PHP/MySQL 开发,我正在尝试探索用于构建现代 Web 应用程序的新技术。 我正在尝试对所有 JavaScript 内容进行排序,如果我理解得很好,一个有效的解决方案可以是服
我是 Nodejs 的新手。我在 route 目录中有一个 app.js 和一个 index.js。我有一个 app.use(multer....)。我还定义了 app.post('filter-re
我正在使用 angular-seed用于构建我的应用程序的模板。最初,我将所有 JavaScript 代码放入一个文件 main.js。该文件包含我的模块声明、 Controller 、指令、过滤器和
我是一名优秀的程序员,十分优秀!