chef-infra - Inspec 中的模拟对象
问题描述
Inspec 中有模拟对象的概念吗?我想模拟一个 REST API,因为提供此 API 的服务器在我的构建管道中不可用。
解决方案
InSpec 构建在 RSpec 之上,RSpec是 Ruby 中流行的测试库。幸运的是,RSpec 支持多种形式的模拟,包括模拟和存根。
如果您有一些包含此 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通过gem传递4.18.104
依赖于 RSpec3.9.0
inspec-core
。
最后一个想法,如果您计划与 REST API 进行交互,并且想要更真实地表示它们返回的内容以进行更“端到端”的风格测试(InSpec 最终是这样),请考虑引入vcr
gem。这个 gem 执行 API 的记录/回放,第一次进行真正的调用,并在后续测试中使用保存的结果。它有时会给你一种错误的安全感(它会错过 API 更改),但它确实提供了完整的端到端体验。
推荐阅读
- postscript - 后记测试条件
- php - Php:检查是否有查询以及是否传递了 GET 参数的可靠方法
- ruby-on-rails - Rails 控制器参数通过干式验证进行验证
- pandas - 使用 read_csv 时如何使索引列 int32?
- vue.js - 我可以使用 Vue 和 Vue Router CDN 导入单个文件组件吗?
- amazon-web-services - 在 Symfony 4 项目中使用 .env 中的 Amazon RDS Globals
- c# - 为什么在 Syntax Visualizer 工具中将其称为 C# Syntax Graph(而不是 C# Syntax Tree)?
- java - 列转置密码:如何加密
- android - textColor 覆盖 textColorPrimary 和 textColorPrimaryDark
- python - 在 python 中使用 C++ Qt5 插件