首页 > 解决方案 > 如何正确测试 Rails 中是否出现错误?

问题描述

我正在用 Rails 测试一个交互器,assert_raise并且我正在向它传递不应引发错误的参数。

但是,该assert_raiseInteractor 调用不会失败,从而呈现误报。

交互者:

# frozen_string_literal: true

class Crm::ListTags
  include Interactor

  before do
    context.adapter ||= CrmAdapter.new
  end

  delegate :contact_id, :adapter, to: :context

  def call
    response = adapter.list_contact_tags(contact_id)
    context.contact_tags = response.body["contactTags"]
    return if response.success?

    raise StandardError.new "#{self.class} ERROR: #{response.body['message']}"
  end
end

测试:

VCR.use_cassette("crm.active_campaign.retrieve_contact_tags_for_contact.successful") do
      response = Crm::ListTags.call(adapter: @adapter, contact_id: contact_id)
      assert response.success? # assertion success
      assert_raise StandardError do
        Crm::ListTags.call(adapter: @adapter, contact_id: contact_id) # assertion should fail but doesn't (as if it were reaching the error)
      end
    end
    

如您所见,我将相同的参数传递给两个 Interactor 调用。第二个应该失败,因为它不应该达到预期的错误。然而它没有。

标签: ruby-on-railsrubytestingminitest

解决方案


推荐阅读