ruby-on-rails – 在前端运行集成/验收测试.需要前端的API来告诉Rails要为每个测试设置哪个数据库状态

我的前端是一个基于EmberJS的应用程序.这是完全不同步的,所以用Capybara测试是 painmisery.另一方面,Ember提供了一个梦幻般的测试套件开箱即用,使验收测试有趣和有效.

通常,夹具或后端模拟都用于验收Ember应用程序.但是,针对嘲笑的测试根本不能满足我的需求:

>它不会显示后端和前端之间的API不一致,竞争条件等.
>以这种方式测试后端业务逻辑是不可能的.这些测试不是集成测试.
>最后,验收测试需要持久性,所以你必须在模拟中复制后端行为.这是非常乏味的,你有效地最终实现两个后端.

所以我想测试反对真正的后端!将Ember设置为使用本地后端实例进行测试是微不足道的.但问题是后端将在各个测试之间持续其状态甚至测试会话.

这就是为什么我正在考虑在Rails中实现一个特殊的公共API:

>仅当使用特定标志或env var运行Rails时,API才可用.
> Rails运行在非测试模式下,正常运行在正常的API调用中.
>在每次测试之前,前端调用特殊API,告诉Rails需要哪个数据库进行此特定测试.
>当接收到对特殊API的调用时,Rails清理数据库并使用所请求的数据填充数据.例如,要从购物车中测试项目删除,数据库应该在购物车中有三个项目.
> Rails完成API请求,前端开始测试.
>前端运行测试步骤,使用正常的后端API,如在生产中:登录,创建帖子,对它们发表评论.它也会尝试做一些禁止的事情,例如G.编辑帖子而不登录,超过文本长度限制等,并验证后端是否拒绝禁止的操作.
>当前端运行下一个测试时,它将再次调用特殊的API. Rails将丢弃以前测试所产生的状态并设置新的状态,用于此特定测试.

我是一个前沿开发者,具有粗略的Rails知识. Factory GirlDatabase Cleaner似乎是工作的正确工具,但绝对没有信息如何在Rails正常测试环境之外使用它们.我想我需要一个控制器或一个Rails引擎或某些东西.

所以问题是:如何在Rails中使用可以由前端使用的API来告诉Rails使用fixture工厂设置某个数据库状态,而Rails是以非测试模式运行的.即提供REST API并且不通过RSpec / Capybara / Cucumber运行?

奖励功能:灯具工厂属性应在前端定义,以便测试代码存储在一个地方.因此,后端应该能够通过特殊的API接受夹具工厂属性.仍可以在后台的代码库中定义默认值.

我相信这可能成为接受/集成测试的最佳实践.如果我设法实现它,我保证发布一个宝石.

解决方法

可能是这样的事情

配置/ routes.rb中

namespace 'test_api' do
   resource 'db_transaction',only: [:create,:destroy]
 end if Rails.env.test?

控制器/ test_api / db_transactions_controller.rb

require 'database_cleaner'
def create
  DatabaseCleaner.start
end

def destroy
  DatabaseCleaner.clean
end

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...