给定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/