And*_*aus 14 integration-testing ruby-on-rails acceptance-testing database-cleaner factory-bot
我的前端是一个基于EmberJS的应用程序.它本质上是完全异步的,所以用Capybara测试它是痛苦和痛苦.另一方面,Ember提供了一个开箱即用的优秀测试套件,使验收测试变得有趣和有效.
通常情况下,使用固定装置或后端模拟验收Ember应用程序.但是对模拟的测试并不能让我满意:
所以我想测试真正的后端!设置Ember以使用本地后端实例进行测试是微不足道的.但问题是后端将在各个测试甚至测试会话之间保持其状态.
这就是为什么我想在Rails中实现一个特殊的公共API:
我是一个对Rails有粗略了解的前端开发人员.Factory Girl和Database Cleaner似乎是适合这项工作的工具,但绝对没有关于如何在Rails正常测试环境之外使用它们的信息.我想我需要一个控制器或一个Rails引擎.
所以问题是:如何在Rails中创建一个API,前端可以使用它来告诉Rails使用fixture工厂设置某个数据库状态,而Rails则以非测试模式运行,即提供REST API和没有通过RSpec/Capybara/Cucumber运行?
额外功能:应在前端定义夹具工厂属性,以便将测试代码存储在一个位置.因此,后端应该能够通过特殊API接受夹具工厂属性.默认值仍然可以在后端的代码库中定义.
我相信这可能成为验收/集成测试的最佳实践.如果我设法实现它,我保证发布一个gem.
可能是这样的
配置/routes.rb
namespace 'test_api' do
resource 'db_transaction', only: [:create, :destroy]
end if Rails.env.test?
Run Code Online (Sandbox Code Playgroud)
控制器/test_api/db_transactions_controller.rb
require 'database_cleaner'
def create
DatabaseCleaner.start
end
def destroy
DatabaseCleaner.clean
end
Run Code Online (Sandbox Code Playgroud)