Я тестирую свое приложение Rails с помощью Minitest и Mocha для модульных и интеграционных тестов и хочу проверить, работает ли командная строка. команда вызывается с определенными параметрами.
Скажем, у меня есть класс:
class Provisioning::Backup
def create(path)
system("tar -czf #{path} bar.tar.gz")
end
end
Мой тест только хочет знать, запускается ли эта команда с этими параметрами. И не использует ли он system()
или его альтернативу ``
. Или даже через resque и тд. Я хочу проверить снаружи, а не внутреннюю реализацию.
Поэтому я не доволен своим текущим решением в *test/integration/user_requests_backup_test.rb*:
class UserRequestsBackupTest < ActionDispatch::IntegrationTest
test "requests for a backup runs a backup-script" do
contact = contacts(:harry)
site = contact.sites.first
Provisioning::Backup.expects(:system).with("tar -xzf foo bar")
post "/v1/sites/#{site.id}/backups"
assert_response :success
end
# backup is already pending
# backup fails
end
Это работает, но утверждает реализацию, а не поведение, потому что Provisioning::Backup.expects(:system).with("tar -xzf foo bar")
слишком много предполагает о внутренней работе и потерпит неудачу, как только я перенесу это, например. спасать
Каковы мои другие варианты? Есть ли способ смоделировать или заглушить и ожидать system
на более низком уровне? Может быть, есть шаблон или драгоценный камень, который позволяет издеваться и ожидать команд более общим способом?