在RSpec/Rack::Test/Sinatra中同时运行两个测试



给定sinatra应用的示例

post '/1' do
  sleep(1) until @2
  0
end
post '/2' do
  @2 = true
  0
end

以及示例RSpec测试

describe 'test' do
  it 'does /1' do
    post '/1'
    expect(last_response.body) to eq?(0)
  end
  it 'does /2'
    post '/2'
    expect(last_response.body) to eq?(0)
  end
end

第一个测试(it does /1)将挂起,等待调用/2。

是否可以告诉RSpec在开始测试#2之前不要等待测试#1的结果完成?A.K.A,RSpec中是否可以进行异步测试?

是。一个简单的方法是使用并行测试宝石:

  • https://github.com/grosser/parallel_tests

适用于CI服务器的类似宝石:

  • https://github.com/tmm1/test-queue
  • https://github.com/ArturT/knapsack

这些精华都是关于在CPU之间进行测试。您的代码更适合并发测试。

如果你对使用Minitest持开放态度(这太棒了),那么就会有出色的并发性。"Minitest让你能够表示你的一些或所有测试用例能够同时运行,正如源代码评论中所指出的,这只能意味着一件事:你的规则和测试都很棒。"

请参阅详细解释的博客:

  • http://chriskottom.com/blog/2014/10/exploring-minitest-concurrency/

最新更新