【问题标题】:How to start a secondary rails app during rspec tests?如何在 rspec 测试期间启动辅助 Rails 应用程序?
【发布时间】:2017-02-16 06:29:54
【问题描述】:

我有 2 个 Rails 应用程序。一个是Web 界面(我称之为UI),另一个是API 服务器(我称之为API)。

它们一起交互,UI 正在向 API 发送 json 命令。我想在集成中测试所有这些。今天我从命令行手动启动API,我正在寻找一种从测试套件自动启动API服务器的方法。

我正在使用 Capyraba、Selenium、Rspec。在测试Capybara自动启动一个UI服务器的过程中,我还需要启动一个API服务器。

任何提示表示赞赏。谢谢


我尝试了Process.spawn("cd /api/project/path && rails s -e test"),但收到ActionController::RoutingError: No route matches 错误,指出API 中的路径不存在。但是当我手动运行 API 时,我没有这个错误。

我相信 Rack 对 2 个环境感到困惑

【问题讨论】:

    标签: ruby-on-rails selenium rspec capybara


    【解决方案1】:

    您需要确保 API 在您的场景开始之前正在运行。如果它没有运行,你可以通过添加before钩子来添加规则来启动它:

    #features/supports/app_life_cycle_hooks.rb
    Before do |scenario|
      start_api()   
    end
    
    def start_api()
     Process.spawn("./script/server start")
    end
    

    【讨论】:

    • system 正在阻塞,不是吗?
    • 更好用Process.spawn
    • 感谢您的建议。可悲的是它不起作用。我得到了Rack app error handling request { POST /api/path/i_m/testing } #<ActionController::RoutingError: No route matches [POST] "/api/path/i_m/testing">。当然,当我手动启动 APi 时,这个错误不会出现。
    猜你喜欢
    • 1970-01-01
    • 2012-03-29
    • 2013-05-11
    • 1970-01-01
    • 2011-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多