単体テストと統合テストのために、Minitest とMochaを使用して Rails アプリケーションをテストしており、コマンドライン コマンドが特定のパラメーターで呼び出されるかどうかをテストしたいと考えています。
たとえば、クラスがあります:
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")
は、内部の仕組みを想定しすぎており、これを resque などに移動するとすぐに失敗するためです。
他のオプションは何ですか? system
より低いレベルでモックまたはスタブして期待する方法はありますか? より一般的な方法でコマンドをモックアウトして期待できるパターンまたは宝石はありますか?