package recruitment import ( "os" "testing" ) // TestLiveAnchorScoring 诊断:读取本地保存的列表页 HTML,打印每个锚点的评分决策。 // 用于定位「单元测试判定应过滤、但实际抓取却入库」的差异。 // 运行前需将列表页 HTML 保存到 testdata/rszk.html。 func TestLiveAnchorScoring(t *testing.T) { data, err := os.ReadFile("testdata/rszk.html") if err != nil { t.Skipf("跳过:未提供 testdata/rszk.html (%v)", err) } html := string(data) cfg := SourceConfig{} // 模拟源1的配置(无 excludeWords 覆盖) incWords := cfg.includeWordsOrDefault() excWords := cfg.excludeWordsOrDefault() minScore := cfg.minScore() t.Logf("词表: include=%d 个, exclude=%d 个, minScore=%d", len(incWords), len(excWords), minScore) base := "http://rsj.guiyang.gov.cn/zfxxgk/fdzdgklm/zfxxgkrsxx/rszk/" raw := extractAnchors(html, base) t.Logf("原始锚点=%d", len(raw)) for i, a := range raw { if len([]rune(a.Text)) < 4 { continue } keep := scoreAnchor(a, incWords, excWords, minScore) // 仅打印与「依申请公开」或判定为 keep 的条目,聚焦问题。 if keep || containsAny(a.Text, []string{"依申请公开", "人才网", "信用中国"}) { t.Logf("[%d] keep=%v url=%s", i, keep, a.URL) t.Logf(" text=%q", a.Text) } } }