gpt4 book ai didi

ruby gem : writing tests for api wrapper

转载 作者:太空宇宙 更新时间:2023-11-03 16:55:35 24 4
gpt4 key购买 nike

我正在为将用于多个应用程序的 API 包装器编写一个 gem。我无法控制这个 API,但我有一个开发环境,我可以在不影响生产的情况下搞砸。

您将如何为这个 gem 编写测试?

示例:考虑方法 add_customer,它采用多个参数(姓名、电子邮件等),电子邮件是唯一的。

如果我编写一个测试来插入电子邮件为 a@gmail.com 的客户。第二次,虽然我的 gem 正常工作,但此测试将失败。

最佳答案

通常您希望为每个正在运行的测试清理数据库。我们正在使用 DatabaseCleaner gem 在 ruby​​ 中执行此操作。基本上在我们运行整个套件之前,我们使用

完全清理数据库
DatabaseCleaner.clean_with :truncation

这需要一些时间,具体取决于您的数据库。之后我们使用事务策略让它保持更快

DatabaseCleaner.strategy = :transaction

这意味着在每个规范之前在数据库中启动一个事务(创建一个保存点)并且测试在这个事务中运行。测试完成后,发出回滚,下一个规范再次有一个干净的数据库。查看https://github.com/bmabey/database_cleaner

如果您确实需要在同一个规范中创建两个这样的记录,那么您将需要创建某种计数器。像这样的东西:

class Counter
def initialize
@count = 0
end

def email
@count += 1
"something_cool#{@count}@whatever.com"
end
end

然后使用这个计数器每次都给你一个独特的电子邮件。查看 FactoryGirl gem https://github.com/thoughtbot/factory_girl/wiki/Usage 可能是值得的并寻找顺序。如果你正在构建一个小的 gem,那么你可能不想添加很多依赖项。祝你好运。一路 TDD!

无法控制系统的所有部分会导致更大的问题。在单元测试中,您可以愉快地移除所有外部 API 并只返回预期的结果。但当然,如果 API 发生变化,这仍然会通过。分布式系统的集成测试是一个复杂的问题,基本上你需要像系统范围的事务这样的东西,它将系统的所有部分都置于原始状态。既然你没有那种控制权,我就会放弃。

关于 ruby gem : writing tests for api wrapper,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10758180/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com