Я разрабатываю некоторые тестовые примеры в Ruby с помощью rspec.Mocking popen3 block form ruby
Я пытаюсь высмеять функцию popen3.
Однако, в то же время сохраняя форму блокировки, я не в состоянии захватить ожидаемую выходную информацию:
Class MyClass
def execute_command
Open3.popen3(command) do |stdin, stdout, stderr, wait_thr|
output['wait_thr'] = wait_thr.value
while line = stderr.gets
output['stderr'] += line
end
end
return output
end
end
издеваться из функции, я делаю следующее:
it 'should do something'
response = []
response << 'stdin'
response << 'stdout'
response << 'test'
response << 'exit 0'
# expect
allow(Open3).to receive(:popen3).with(command).and_yield(response)
# when
output = myClassInstance.execute_script
#then
expect(output['wait_thr'].to_s).to include('exit 0')
Mocking функция не вводит код «do», и я остаюсь с пустой структурой данных.
Мне было интересно, как я мог правильно это сделать?
Спасибо!
Не могли бы вы предоставить полную спецификацию? – wicz
@wicz Я обновил сообщение – Parth
И эта спецификация не возвращает никаких ошибок? Это немного запутанно. Вы издеваетесь над «ответом» как массивом, но «ожидаете», если это хэш. И сам код, вы определяете 'output' внутри блока и возвращаетесь в конце метода. Он должен возвращаться и ошибочно, потому что переменная не определена из блока. Или, может быть, теперь вы используете общий код. Это затрудняет помощь. – wicz