测试参数与多个正则表达式 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
我有一个方法可以处理某些 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