feat: 完善后端脚手架基础能力
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
package ws
|
||||
|
||||
import (
|
||||
"net/http/httptest"
|
||||
"strings"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/gorilla/websocket"
|
||||
)
|
||||
|
||||
func TestControllerConnectAndBroadcast(t *testing.T) {
|
||||
gin.SetMode(gin.TestMode)
|
||||
hub := NewHub()
|
||||
controller := NewController(hub)
|
||||
router := gin.New()
|
||||
router.GET("/ws", controller.Connect)
|
||||
server := httptest.NewServer(router)
|
||||
defer server.Close()
|
||||
|
||||
url := "ws" + strings.TrimPrefix(server.URL, "http") + "/ws?room=test&client_id=tester"
|
||||
conn, _, err := websocket.DefaultDialer.Dial(url, nil)
|
||||
if err != nil {
|
||||
t.Fatalf("Dial() error = %v", err)
|
||||
}
|
||||
defer conn.Close()
|
||||
_ = conn.SetReadDeadline(time.Now().Add(2 * time.Second))
|
||||
|
||||
// 连接后依次收到 welcome 和 joined presence。
|
||||
for i := 0; i < 2; i++ {
|
||||
var message OutgoingMessage
|
||||
if err := conn.ReadJSON(&message); err != nil {
|
||||
t.Fatalf("initial ReadJSON() error = %v", err)
|
||||
}
|
||||
}
|
||||
if err := conn.WriteJSON(IncomingMessage{Type: EventMessage, Data: "hello"}); err != nil {
|
||||
t.Fatalf("WriteJSON() error = %v", err)
|
||||
}
|
||||
var message OutgoingMessage
|
||||
if err := conn.ReadJSON(&message); err != nil {
|
||||
t.Fatalf("ReadJSON() error = %v", err)
|
||||
}
|
||||
if message.Type != EventMessage || message.Data != "hello" || message.Room != "test" {
|
||||
t.Fatalf("unexpected broadcast: %+v", message)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user