2015-11-13 49 views
1

我有一個方法可以處理一些api調用失敗。我爲它寫了測試:測試參數與多個正則表達式n RSpec

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個正則表達式合併成單個期望。

在一個測試用例中可以將多個Regexps放在單個參數上嗎?

回答

1

您可以將所有這些正則表達式組合成一個(使用正則表達式的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 

測試用例內部

然後