【问题标题】:Launch sinatra from a test/spec or another ruby script从测试/规范或其他 ruby​​ 脚本启动 sinatra
【发布时间】:2014-10-06 23:58:57
【问题描述】:

我正在试验,我正在尝试从 RSpec 启动虚拟 Sinatra 应用程序,并在规范完成后将其终止。比如:

# spec/some_spec.rb

before(:all)
  # launch sinatra dummy app
end

after (:all)
  # kill sinatra dummy app
end

it 'should return list of whatever' do
  expect(JSON.parse(make_request('0.0.0.0:4567/test.json')))
   .to include('whatever')
end

我可以使用system("ruby test/dummy/dummy_app.rb"),但是我怎样才能只杀死那个进程呢?有谁知道我如何在测试中(或从另一个 ruby​​ 脚本)启动 Sinatra?我知道 WebMocks,但我想看看我是否可以设法让我的测试以这种方式工作。

【问题讨论】:

    标签: ruby rspec sinatra


    【解决方案1】:

    在“Testing Sinatra with Rack::Test”上查看 RSpec。我建议您使用该代码作为样板来开始。

    只需将其添加到您的描述块中:

    def app
      Sinatra::Application
    end
    

    我建议你阅读 RSpec。


    由于您想测试外部系统,根据您的评论,您可以使用 Net::HTTP 发出请求,然后针对响应进行测试,而不是 system "curl whatewer.com"

    看看“Testing an external API using RSpec's request specs”。

    【讨论】:

    • 感谢您提供指向 sinatra RSpec 部分的链接,我之前将其红色但我没有意识到我可以按照我想要的方式使用它。
    • 您好,很抱歉我接受了您的回答,但我发现它并不能完全满足我的需求。我正在写的更像是一个冒烟测试,我需要根据它向一些实际的实时服务器发出实际请求。我正在重构一个遗留代码,他们在很多地方使用system "curl whatewer.com" 我想重构它,首先我需要确保我不会破坏现有的东西。不过这是个好地方(所以+1)。
    • 更新了我认为你想做的答案。
    • 嗨,我同意你的更新,但就像我在将系统 curl 重构为 ruby​​ net-httpparty_foul 之前所说的那样
    【解决方案2】:

    在编写请求规范以确保功能不会被破坏时,我决定编写单独的 Cucumber 功能。好消息是我可以使用 Capybara,并且感谢 Selenium Web Drive,我可以在运行测试之前启动服务器。

    因此,我创建了一个虚拟 Sinatra 应用程序(它将代表我正在测试的实际代码正在向其发出请求的外部服务(包括讨厌的 system('curl whatever.com'))。

    我所要做的就是将传递给 curl 的方法存根以使用 Capybara.current_session.server.hostCapybara.current_session.server.port

    完成重构后,我所要做的就是从黄瓜/水豚配置中删除 Capybara 服务器变量和 Selenium Web 驱动器。

    经过短暂更改后的测试仍然有效且有效。

    更新

    最后我用 RSpec 请求测试写了这一切,因为在 Cucumber 中做这件事有点费时,而且我已经花太多时间在这上面了。

    我用 RSpec 标记标记这些类型的请求测试,在我午餐之前,我手动午餐简单的 Sinatra/Grape 虚拟 API 应用程序,向其发出请求。 (然后我用这个标签运行 RSpec 测试)

    所以基本上我最终得到了使用 net/http 的功能规范,它使用 WebMock 并且不需要服务器,并在运行规范之前请求我需要运行服务器的测试。 所以最初的问题仍然存在,如何在测试开始前为服务器提供午餐

    在我介绍完所有功能后,我打算将 curl 重写为 net/http,但是我将保留这些请求规范,因为我发现它们在涉及疯狂 API 场景时是个好主意(例如测试 https +提取的身份验证)

    【讨论】:

      猜你喜欢
      • 2023-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多