} githubClient.ListReleaseAssetsReturns([]github.ReleaseAsset{ { ID: github.Int(456789), Name: github.String("great-file.tgz"), }, { ID: github.Int(3450798), Name: github.String("whatever.tgz"), }, }, nil) githubClient.UploadReleaseAssetStub = func(github.RepositoryRelease, string, *os.File) error { Expect(existingAsset).To(BeFalse()) existingAsset = true return errors.New("some-error") } }) It("retries 10 times", func() { _, err := command.Run(sourcesDir, request) Expect(err).To(Equal(errors.New("some-error"))) Ω(githubClient.UploadReleaseAssetCallCount()).Should(Equal(10)) Ω(githubClient.ListReleaseAssetsCallCount()).Should(Equal(9)) Ω(*githubClient.ListReleaseAssetsArgsForCall(8).ID).Should(Equal(112)) actualRelease, actualName, actualFile := githubClient.UploadReleaseAssetArgsForCall(9) Ω(*actualRelease.ID).Should(Equal(112)) Ω(actualName).Should(Equal("great-file.tgz"))