Rspec:运行外部rails服务器

Ben*_*enj 5 rspec ruby-on-rails

这个问题是关于从rspec环境启动外部项目的rails服务器.

有2个项目.

  • 第一个项目充当管理员后台,它是用户与网页交互的中央应用程序.我称之为BackOffice
  • 第二个项目是一个Json API服务器,它将通过json请求从Admin Back Office接收命令.我称之为ApiServer

我正在尝试测试这两个rails项目之间的API交互,我想设置rspec,这样我就可以在BackOffice项目中编写和维护我的spec文件.这些规范将启动ApiServer rails服务器,然后播放以执行测试.

我的问题是关于启动ApiServer rails服务器.在查看rails app初始化文件后,我假设我必须向"config/environment"添加一个require.


但是当我插入BackOffice/spec/spec_helper.rb时

require File.expand_path('../../../ApiServer/config/environment', __FILE__)
Run Code Online (Sandbox Code Playgroud)

我收到了错误

`initialize!': Application has been already initialized. (RuntimeError)
# Backtrace to the file:
# ApiServer/config/environment.rb
# Line:
# Rails.application.initialize!
Run Code Online (Sandbox Code Playgroud)

我还尝试在反引号中简单地调用以下内容

`cd /api/path; bundle exec rails s -p 3002` 
Run Code Online (Sandbox Code Playgroud)

但得到了同样的错误


然后我从Capybara源代码中获得灵感,并且需要"ApiServer/application",然后我能够创建一个ApiServer.new对象,但是一旦我调用initialize!它就会得到相同的消息.

任何帮助是极大的赞赏.干杯

Yur*_*dev 1

实际上,第二个应用程序只不过是一个外部服务,最好对测试进行存根。

Thoughtbot 有一篇关于使用vcrgem 模拟外部 Web 服务的好文章:

https://robots.thoughtbot.com/how-to-stub-external-services-in-tests