Inspec中的模拟对象

问题描述 投票:0回答:1

Inspec中是否有模拟对象的概念?我想模拟一个REST API,因为在我的构建管道中没有提供该API的服务器。

chef inspec
1个回答
0
投票

InSpec建立在RSpec之上,C0是Ruby中流行的测试库。幸运的是,RSpec支持许多forms of mocking,包括Mocks and Stubs

[如果您有一些包装此REST API功能的中间类,说您将其称为ServiceGateway,则可以在您的InSpec测试中使用RSpec double模拟该服务,如下所示:

gateway = double('ServiceGateway')
expect(gateway).to receive(:get_data).and_return({ data: [1,2,3] })

# instantiate class under test providing the double to execute the rest of the test.

您应始终检查所使用的InSpec版本取决于哪个RSpec版本。您可以通过查看Gemfile.lock文件或RubyGems.org的传递视图来实现。例如,InSpec 4.18.104 depends on RSpec 3.9.0 transitively through the inspec-core gem

[最后的想法,如果您打算与REST API进行交互,并希望更真实地表示它们返回的内容,以进行更“端到端”的样式测试(InSpec最终会做到这一点,请考虑加入[ C0]。此gem执行API的记录/播放,第一次进行真正的调用,并在后续测试中使用保存的结果。有时确实会给您一种错误的安全感(它将错过API更改),但确实会提供完整的端到端体验。

© www.soinside.com 2019 - 2024. All rights reserved.