Ruby on rails RubyonRails-随机失败的RSpec测试

Ruby on rails RubyonRails-随机失败的RSpec测试,ruby-on-rails,ruby,rspec,Ruby On Rails,Ruby,Rspec,对不起,我问了个愚蠢的问题 我添加了外部api以获取响应,以便检查zipcode的验证 app/validators/zipcode_validator.rb class ZipcodeValidator < ActiveModel::Validator def validate(record) record.errors.add(:zipcode, :blank) if record.zipcode.blank? record.errors.add(:zipcode,

对不起,我问了个愚蠢的问题

我添加了外部api以获取响应,以便检查zipcode的验证

app/validators/zipcode_validator.rb

class ZipcodeValidator < ActiveModel::Validator
  def validate(record)
    record.errors.add(:zipcode, :blank) if record.zipcode.blank?
    record.errors.add(:zipcode, :not_found) if WmsService.wms_delivery_dates(record.zipcode).nil?
  end 
end
类ZipcodeValidator 它在现实中运行良好,但随机失败,在运行rspec时花费了更多的时间


对于这种情况,什么是好的解决方案?

您不应该在测试中调用外部API。有几种方法可以避免这种情况:

  • 在第一次调用中记录API响应,然后从磁盘应答(这既快速又可靠)
  • 模拟HTTP调用,例如使用。您需要在规范中编写指定模拟请求和响应。它可能有助于提高测试可读性,也有助于测试边缘情况
  • 在类中包装服务调用,并用RSpec存根替换它
  • 在接受适配器的类中包装服务调用。适配器负责调用外部服务。在测试环境中,通过具有预定响应的测试适配器