Я расширил следующий код в соответствии с моими требованиями. https://github.com/radovskyb/watcher/blob/master/example/basics/main.go
Цель этого кода - отслеживать определенные события (CREATE, WRITE) и предпринимать соответствующие действия на их основе. Чтобы проверить этот код, я использую Ginkgo и Gomega, и здесь мне нужна помощь.
Я пытаюсь проверить приведенный ниже код (также предоставленный в ссылке), и я не уверен, что мне делать дальше.
go func() {
for {
select {
case event := <-w.Event:
fmt.Println(event) // Print the event's info.
case err := <-w.Error:
log.Fatalln(err)
case <-w.Closed:
return
}
}
}()
Я проверил, Gomega поддерживает асинхронное тестирование, которое поддерживает Channel, но я попробовал несколько вещей, но в итоге я инициализировал новый объект-наблюдатель, который требует запуска фактического события для тестирования. Я попытался создать tempDir, чтобы я мог вызвать событие CRETE / WRITE, а затем закрыть канал, но это не помогает, и после запуска этого конкретного теста он просто ждет закрытия канала.
w := watcher.New()
w.FilterOps(watcher.Create, watcher.Write)
dir, err := ioutil.TempDir("", "watcher2")
Expect(err).To(BeNil())
defer os.RemoveAll(dir)
tmpfile := filepath.Join(dir, "watcherremoved")
err = ioutil.WriteFile(tmpfile, []byte("init"), 0666)
Expect(err).To(BeNil())
event := <-w.Event
Eventually(event.Path).Should(Equal(ADMIN_VAULT))
<-w.Closed