【问题标题】:Ruby on Rails - Randomly failing RSpec testsRuby on Rails - RSpec 测试随机失败
【发布时间】:2018-12-04 09:36:01
【问题描述】:

对不起,我的愚蠢问题。

我添加了外部 api 以获取响应以检查邮政编码的验证。

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

它在实际中运行良好,但随机失败,并且在我运行 rspec 时花费了更多时间。

这种情况有什么好的解决办法?

【问题讨论】:

    标签: ruby-on-rails ruby rspec


    【解决方案1】:

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

    1. VCR gem 在第一次调用时记录 API 响应,然后从磁盘回复它(快速且可靠)。
    2. 模拟 HTTP 调用,例如与WebMock。您需要编写指定的模拟请求并在您的规范中编写响应。它可以帮助您提高测试的可读性,也有助于测试边缘案例。
    3. 将您的服务调用封装在您的类中,并将其替换为 RSpec 存根。
    4. 将服务调用封装在接受适配器的类中。适配器负责调用外部服务。在测试环境中通过具有预定响应的测试适配器。

    【讨论】:

      猜你喜欢
      • 2016-01-25
      • 2016-01-31
      • 2020-09-20
      • 1970-01-01
      • 1970-01-01
      • 2015-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多