我想在单元测试中读取服务器发送事件的响应。我想避免时间。不惜一切代价睡觉。
目前我读到的响应w http.ResponseRecorder
是这样的:
func (f *fixture) readResponse(t *testing.T) []byte {
t.Helper()
byteCh := make(chan []byte)
timeout := time.After(100 * time.Millisecond)
go func() {
for len(f.w.Body.Bytes()) == 0 {
}
byteCh <- f.w.Body.Bytes()
}()
select {
case b := <-byteCh:
return b
case <-timeout:
t.Error("no response received")
return nil
}
}
我等着一个事件被写成这样:
for len(f.w.Body.Bytes()) == 0 {
}
如果没有for或time.Sleep
,还有什么可供选择的?
3条答案
按热度按时间tv6aics11#
io.ReadAll
就足够了。5us2dqdw2#
如何 Package
httptest.ResponseRecorder
并覆盖Write
和WriteString
方法?mftmpeh83#
我还在学围棋,但这样的东西有用吗?
信号通道和互斥体被添加到fixture结构中。因此writeResponse设置响应体,并通过关闭信号通道发出就绪信号。readResponse函数在阅读响应体之前等待信号。
我认为这将避免你的for循环和需要睡眠。