Я пытаюсь проверить, что мой код на Rails вызывает метод ActiveRecord all (все это синтаксический сахар для find: all) следующим образом:
records = Record.all
:limit => RECORD_LIMIT, :offset => record_offset,
:select => 'id',
:conditions => [ 'record_type = ? AND content_score >= ?', 'user', min_content_score ],
:order => 'content_score DESC'
Единственная часть этого кода, которая мне небезразлична в данном случае, - это параметр: condition, а меня интересует только фрагмент SQL, а не фактические значения связанных переменных. Я могу использовать средство хеширования FlexMock, чтобы утверждать, что (по крайней мере) параметр: condition присутствует следующим образом:
mock.should_receive(:all).with FlexMock.hsh :conditions => []
Однако, это соответствует только вызовам, где значение параметра: condition является пустым массивом. Что я действительно хочу, так это:
mock.should_receive(:all).with FlexMock.hsh [ 'record_type = ? AND content_score >= ?', Object, Object ]
Но, к сожалению, как показывает irb, 'user' и Object не эквивалентны:
>> '' === Object
Есть хорошие идеи? Возможны ли вложенные совпадения?