测试参数与多个正则表达式 n RSpec

Test parameter vs multiple regexp n RSpec

我有一个方法可以处理某些 api 调用的失败。我为它写了测试:

  it 'logs the error' do
    expect(Rails.logger).to receive(:error).with(/Failed API call/i)
    expect(Rails.logger).to receive(:error).with(/#{error_type}/)
    expect(Rails.logger).to receive(:error).with(/#{server_error}/)
    subject
  end

但要使其正常工作,我需要调用 3 api 次或将其拆分为 3 个测试用例。我不喜欢这两种解决方案。我认为最好的方法是将 3 个正则表达式组合成一个期望值。

是否可以在一个测试用例的单个参数上放置多个正则表达式?

您可以将所有这些正则表达式合并为一个(使用正则表达式的 AND 运算符)。

  let(:expected_log_message) do
    /(?=.*Failed API call)(?=.*#{error_type})(?=.*#{server_error})/i
  end

此正则表达式将测试字符串是否符合以上所有条件。

然后在一个测试用例里面:

  it 'logs the error' do
    expect(Rails.logger).to receive(:error).with(expected_log_message)
    subject
  end