var reader io.Reader var fakeWriter *fake_io.FakeWriter var wg *sync.WaitGroup BeforeEach(func() { reader = strings.NewReader("message") fakeWriter = &fake_io.FakeWriter{} wg = nil }) JustBeforeEach(func() { helpers.Copy(logger, wg, fakeWriter, reader) }) It("copies from source to target", func() { Expect(fakeWriter.WriteCallCount()).To(Equal(1)) Expect(string(fakeWriter.WriteArgsForCall(0))).To(Equal("message")) }) Context("when a wait group is provided", func() { BeforeEach(func() { wg = &sync.WaitGroup{} wg.Add(1) }) It("calls done before returning", func() { wg.Wait() }) }) })