При издевательстве, как я могу вернуть один из аргументов, который был передан? - PullRequest
4 голосов
/ 08 марта 2012

У меня есть метод класса, который я хотел бы смоделировать и вернуть один из переданных аргументов. Примерно так в моем коде:

converted_data = Myclass.convert(arg, some_other_arg, data)

И в моем тесте я хотел бы иметь возможность сделать следующее (хотя это не работает).

Myclass.should_receive(:convert).with(*args).and_return(args[2])

Так что метод на самом деле ничего не делает! Если я запускаю, как написано выше, я получаю сообщение об ошибке, что он не знает, что такое аргументы, чтобы вернуть его.

Ответы [ 2 ]

2 голосов
/ 27 апреля 2012

Я нашел ответ:

@something.should_receive(:method).with(any_args()).and_return { |*args| args }

Чтобы вернуть определенный аргумент, выберите его из массива в блоке and_return! Так что для вашего примера это будет:

Myclass.should_receive(:convert).with(any_args()).and_return { |*args| args[2] }

Вы, вероятно, хотите сделать это на экземпляре Myclass.

1 голос
/ 08 марта 2012

Используйте #and_return с блоком:

Myclass.should_receive(:convert).with(*args).and_return {|args| args[2]}
...