Minitest 및 Mocha에 대해 유닛 및 통합 테스트를 위해 레일즈 애플리케이션을 테스트하고 특정 매개 변수로 명령 행 명령이 호출되는지 테스트하려고하는지 테스트하려고합니다. 만 이러한 매개 변수와 그 명령이 실행됩니다 알고 싶어루비 테스트는 명령이 실행될 것으로 기대합니다
class Provisioning::Backup
def create(path)
system("tar -czf #{path} bar.tar.gz")
end
end
내 시험 :
말은, 내가 클래스가 있습니다. 그리고 system()
또는 그 대안 ``
을 사용하는지 여부는 아닙니다. 또는 resque 등을 통해. 내부 구현이 아닌 외부를 테스트하고 싶습니다.
는 그러므로 나는 * 테스트/통합 내 현재 솔루션에 만족하지 않다/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
을 기대할 수있는 방법이 있습니까? 좀 더 일반적인 방식으로 명령을 조롱하고 기대할 수있는 패턴 또는 보석이 있습니까?
예, 또한 방법을 테스트하는 단위 테스트 등이 있습니다. 내 질문은 구현 테스트가 적기 때문에 내 통합 테스트를 테스트하기 위해서이다. 왜냐하면 * 단위 테스트에서 그 구현을 테스트하기 때문이다. 내 질문은 내 통합 테스트에서 구현 방법/안/테스트 구현 방법에 관한 것입니다. – berkes