如何为 googollee socket.io 处理程序编写单元测试

How to write unit test for googollee socket.io handlers

我正在使用一个 go 库:github.com/googollee/go-socket.io 我想知道如何为连接事件编写一个非常简单的测试,例如,如果我想检查是否没有返回错误。

package main

import (
    "fmt"
    "log"
    "net/http"

    socketio "github.com/googollee/go-socket.io"
)

func main() {
    server := socketio.NewServer(nil)

    server.OnConnect("/", func(s socketio.Conn) error {
        s.SetContext("")
        fmt.Println("connected:", s.ID())
        return nil
    })
}

创建一个将 socketio.Conn 接口作为参数的单独函数,并将其传递给 server.OnConnect 而不是匿名函数。

然后你可以模拟 socketio.Conn 来对你的函数进行单元测试。

例如,将您的代码片段更改为:

package main

import (
    "fmt"
    "log"
    "net/http"

    socketio "github.com/googollee/go-socket.io"
)

func main() {
    server := socketio.NewServer(nil)

    server.OnConnect("/", handleOnConnect)
}

func handleOnConnect(s socketio.Conn) error {
    s.SetContext("")
    fmt.Println("connected:", s.ID())
    return nil
}

现在,您所要做的就是测试 handleOnConnect。因为 socketio.Conn 是一个接口,你可以创建一个模拟来测试这个函数而不用担心 socketio 内部。

您还可以创建一个新接口,它是 socketio.Conn 的子集,具体取决于您的用例,以简化模拟。