test: 测试文件跟源文件同名,删掉复制粘贴出来的重复

改完之后「某个行为在哪测」就是查同名文件:

  lazyglobal_test.go      → engine_globals_test.go
  static_test.go          → script_static_test.go
  scope_pool_test.go      → script_vm_test.go     它测的是 VM 池,不是作用域
  esmwrap_test.go         → bundle_finalize_test.go
  missing_global_test.go  → errors_hints_test.go
  entry_test.go           → bundle_entry_test.go  并收下 bundle_test.go 里
                                                  那三个 TestEntry_*

删掉 5 组复制粘贴。其中 TestNew_同实例调用串行 和 TestInstance_调用串行 **函数体
完全一致**,只差 mustCompile 的文件名参数 counter.js / counter.ts。Instance 的
测试全部归 instance_test.go 并统一前缀成 TestInstance_,scope_test.go 只留作用域。

vmstate_test.go + govalue_test.go → goja_facts_test.go。这两个测的都是 **goja
本身**,不是这个库:Program 能不能给多个 Runtime 共用、顶层变量跟不跟 Runtime 走、
Go 的切片进到脚本里是不是真数组。它们是「为什么这个库要这么设计」的实验记录,
goja 行为变了会先红。原来那个名字看不出这层定位。

helper 集中到 helper_test.go:newEngine / mustCompile 被十几个文件依赖,原来住在
script_test.go 里,那个名字暗示「测 Script」,找不到。

caller_example_test.go 并进 caller_test.go——同一个类型没必要两个文件。

overlay_test.go 和 script_vm_test.go 保持内部测试,各写了一句为什么:前者要读
Engine.loader 和 isPrepared,后者要直接断言 vmHandle.scoped。我试过把 overlay
挪成外部测试,挪不动。
This commit is contained in:
2026-09-10 15:39:25 +08:00
parent 7e1893b246
commit 7c9a70712e
16 changed files with 427 additions and 572 deletions
-58
View File
@@ -2,9 +2,7 @@ package jscriptx_test
import (
"context"
"errors"
"path/filepath"
"strings"
"testing"
"git.fsdpf.net/go/jscriptx"
@@ -100,59 +98,3 @@ export function shout(s: string): string { return upper(s) }`
t.Errorf("got = %#v", got)
}
}
// 直接 Compile 的源码不能有 import,报错要指出走 esm 子包。
func TestEntry_Compile不支持import(t *testing.T) {
e := newEngine(t)
_, err := e.Compile("imp.ts", `import x from "./other"
export default class H { m() { return x } }`)
if err == nil {
t.Fatal("应该报错")
}
for _, want := range []string{"Could not resolve", "jscriptx/esm"} {
if !strings.Contains(err.Error(), want) {
t.Errorf("报错里没有 %q: %v", want, err)
}
}
t.Logf("%v", err)
}
// 配了 WithResolveDir 之后,直接 Compile 的源码也能 import。
func TestEntry_ResolveDir(t *testing.T) {
e := newEngine(t, jscriptx.WithBundleOptions(
jscriptx.WithResolveDir("esm/testdata/app/src/Resource"),
))
s, err := e.Compile("inline.ts", `import ResExecuter from "./ResExecuter"
export default class H {
m() { return new ResExecuter().Store("cfg") }
}`)
if err != nil {
t.Fatalf("配了 resolveDir 应该能 import: %v", err)
}
ctx := context.Background()
obj, err := s.New(ctx)
if err != nil {
t.Fatal(err)
}
defer obj.Close()
if got, _ := obj.Call(ctx, "m"); got != "stored:cfg" {
t.Errorf("got = %#v", got)
}
}
// 语法错误在 Compile 阶段就报,带文件位置。
func TestEntry_语法错误(t *testing.T) {
e := newEngine(t)
_, err := e.Compile("bad.ts", `export default class { 语法错误 (((`)
if err == nil {
t.Fatal("应该报语法错误")
}
var jsErr *jscriptx.Error
if !errors.As(err, &jsErr) || jsErr.Kind != jscriptx.KindCompile {
t.Fatalf("错误分类不对: %v", err)
}
if !strings.Contains(err.Error(), "bad.ts") {
t.Errorf("报错没带文件名: %v", err)
}
t.Logf("%v", err)
}