我有接收復數參數(HTML字符串)的功能。我要檢查這個字符串,即:rspec的:「should_receive」與多個參數的期望
receiver.should_receive(:post_data).with(json_content).with(id_matching(5))
多with
參數不起作用,任何替代多個條件?如果能夠以某種方式製作複合材料,我很高興定義自定義匹配器。
很顯然,我可以運行相同的測試多次和測試有關的結果不同的事情,但是這是一個集成測試這需要幾秒鐘的運行,所以我不想讓它更慢。
感謝
編輯:
撰稿時,接受的答案(使用自定義描述定製的匹配),似乎是最好的選擇。然而,它是不完美的,理想的with
會支持的概念「,這是預期的類型的項目,但沒有我們預期的一個人,而不是一個純粹的二進制匹配。
第二個鏈接看起來非常有用。我已經看到了第一個,它沒有提供關於複雜匹配器的詳細信息。明天我會有一場比賽,看看我能否拿出一個合理的匹配器。 – Stefan
+1是相關的,但它不完全回答這個問題。 'with'的行爲與'should'有點不同。自定義匹配器應該會報告爲什麼它不匹配。然而,'with'似乎要等到它收到一個匹配的參數。如果不匹配,rspec只報告不匹配的參數是什麼。即似乎沒有辦法爲'with'定義自定義失敗消息。雖然我很高興被證明是錯誤的! – Stefan
我同意這有區別。我更新了答案,以反映自定義匹配會出現(即作爲參數傳遞給標準'with'法),但仍然留下錯誤消息的問題。儘管這是一種黑客攻擊,但您可以修改自定義匹配器的「description」方法,以輸出關於失敗匹配的任何信息。當「with」報告它失敗時,這個方法就是「預期:」後面使用的方法。由於在rspec代碼中沒有定義'failure_message_for_with',我懷疑這可能是唯一的「鉤子」。 –