无法在Cucumber env.rb中启动Sinatra的多个实例

时间:2014-07-21 10:44:11

标签: ruby sinatra cucumber

我正在编写依赖于两种不同Web服务的自动化测试,我决定使用两种非常基本的Sinatra应用程序来模拟它们。但是我在我的Cucumber env文件中启动多个Sinatra实例时遇到了麻烦。第二个Sinatra实例一开始就停止。

这是我开始测试时得到的输出片段

== Sinatra/1.4.5 has taken the stage on 9000 for development with backup from Thin
Thin web server (v1.6.2 codename Doc Brown)
Maximum connections set to 1024
Listening on localhost:9000, CTRL+C to stop

== Sinatra/1.4.5 has taken the stage on 8082 for development with backup from Thin
Thin web server (v1.6.2 codename Doc Brown)
Maximum connections set to 1024
Listening on localhost:8082, CTRL+C to stop
Stopping ...
== Sinatra has ended his set (crowd applauds)

正如你所看到的那样,第一个服务启动并运行正常,但第二个服务启动正常,但随后立即开始停止

Sinatra app 1

class MockService1 < Sinatra::Base

  get '/some/endpoint' do
      response =
        {
            enabled: false
        }
  end

end

Sinatra app 2

class MockService2 < Sinatra::Base

  get '/some/endpoint' do
      response =
        {
            enabled: false
        }
  end

end

在我的Cucumber env文件中

Thread.new do
  MockService1.run! host: 'localhost', port: '9000'
 end

Thread.new do
  MockService2.run! host: 'localhost', port: '8082'
 end

1 个答案:

答案 0 :(得分:0)

我能够使用childprocess gem在新的子进程下启动一个新的sinatra服务器。

mock_service = ChildProcess.build('ruby', File.join(File.dirname(__FILE__), 'mock_service.rb'))
mock_service.start