如何在gopherjs test中引入jQuery以用于测试及被测代码?
在
gopherjs test中引入jQuery的简便方法 当然有几种简便的方法能帮你在gopherjs test时顺利引入jQuery,不管你偏好CDN加载还是本地npm包都能搞定,我给你整理了几个实用的方案:
方案1:自定义测试HTML模板(最省心)
gopherjs允许你指定自定义的HTML模板来生成测试页面,这样你可以完全沿用平时在index.html里引入jQuery的方式:
- 先创建一个名为
test_template.html的文件,内容如下:
<!DOCTYPE html> <html> <head> <!-- 这里可以用CDN地址,也可以用本地npm安装的文件路径 --> <script src="https://cdn.jsdelivr.net/npm/jquery@3.7.1/dist/jquery.min.js"></script> <!-- 这一行是gopherjs测试的必填项,用来加载自动生成的测试JS文件 --> <script src="{{.Script}}"></script> </head> <body></body> </html>
- 运行测试时指定这个模板即可:
gopherjs test --template test_template.html ./...
测试页面加载时会优先加载jQuery,你的测试代码和被测代码就能直接访问全局的$或jQuery变量了。
方案2:在Go测试代码中动态注入jQuery(无需额外模板)
如果不想维护单独的模板文件,也可以在Go测试代码里动态创建script标签来加载jQuery:
- 如果你已经通过
npm install jquery下载了本地包,可以在测试的TestMain函数里加入这段初始化代码:
package yourpackage import ( "github.com/gopherjs/gopherjs/js" "testing" ) func TestMain(m *testing.M) { // 创建script元素 script := js.Global().Get("document").Call("createElement", "script") // 指向本地npm包的jQuery文件路径 script.Set("src", "./node_modules/jquery/dist/jquery.min.js") // 监听加载完成事件,避免测试代码在jQuery就绪前执行 loaded := make(chan bool) script.Set("onload", func() { loaded <- true }) // 将script标签添加到页面头部 js.Global().Get("document").Get("head").Call("appendChild", script) // 等待jQuery加载完成后再运行测试 <-loaded m.Run() }
- 要是想用CDN,只需要把
src的值换成对应的CDN地址就行,比如"https://cdn.jsdelivr.net/npm/jquery@3.7.1/dist/jquery.min.js"。
方案3:使用gopherjs专用的jQuery绑定包(更Go风格)
如果你希望在Go代码里用更符合Go习惯的方式调用jQuery,可以使用官方维护的github.com/gopherjs/jquery包:
- 先安装这个包:
go get github.com/gopherjs/jquery
- 之后在代码里就能像这样使用:
import "github.com/gopherjs/jquery" // 定义一个便捷的jQuery调用别名 var jq = jquery.NewJQuery func TestDomManipulation(t *testing.T) { // 用Go风格的代码调用jQuery功能 jq("body").Append("<p>测试内容</p>") if jq("p").Length() != 1 { t.Error("未能正确添加元素") } }
注意:这个包依赖全局环境中的jQuery对象,所以还是需要结合方案1或2确保jQuery已被加载。
内容的提问来源于stack exchange,提问作者Ralph
相关产品推荐
相关产品推荐

