Проверка, если функция вызывается с помощью Mocha - PullRequest
9 голосов
/ 09 декабря 2010

В моем текущем приложении на Rails 3 я провожу модульное тестирование, чтобы убедиться, что вызовы для обновления S3 выполняются только в определенных ситуациях. Я не хочу обновлять S3 во время тестов, поэтому я использую Mocha, чтобы заглушить поведение. Есть ли способ убедиться, что функция вызывается с помощью mocha? Я посмотрел на Ожидания, и если я не делаю это неправильно, кажется, я должен сделать:

object.expects(:function_name).once

Однако это не приводит к желаемым результатам: это помечает ошибку, если имя_функции вызывается дважды (что желательно), оно НЕ помечает ошибку, если оно вызывается только один раз (как и должно быть), но проблема НЕ БУДЕТ помечать ошибку, если функция вызывается ноль раз. Мне нужен способ убедиться, что он называется. Кажется, что мокко должен поддержать это, так что, возможно, я делаю это неправильно. Любая помощь будет принята с благодарностью.

***** ИСПРАВЛЕНИЕ:

Оказывается, я все делал правильно, за исключением того, что метод mocha_verify не вызывался автоматически. Для тех, у кого есть подобная проблема, проверьте ответ Оле Мортена Амундсена здесь: Mocha Mock переносит в другой тест

Ответы [ 2 ]

8 голосов
/ 09 декабря 2010

или просто

object.expects(:function_name).twice

в качестве альтернативы, если он имеет другой вход, вы должны проверить, что

resultmock = mock 
object.expects(:function_name).with(someobject).returns(mock)
resultmock.expects(:something).returns(true)
object.expects(:function_name).with(resultmock)

Не знаю, поможет ли это, но это должно дать вам толчок. К вашему сведению: «один раз» по умолчанию. Удачи, сделай TDD (= тестовый первый) или насмешка будет болью :)

Обязательно загрузите mocha последним, чтобы он действительно загружался, как в моем ответе здесь: Mocha Mock переносится на другой тест

6 голосов
/ 09 декабря 2010

Попробуйте:

object.expects(:function_name).at_least_once

Посмотрите документы: http://mocha.rubyforge.org/classes/Mocha/Expectation.html#M000042

...