单元测试用于检测单元模块的代码逻辑, 从内部测试合约代码, 无法检测一些外部 API 和宏
如 lib.rs 所示, 用 #[cfg(test)]
标注测试模块, 用 #[test]
标注测试任务, 测试主要使用 near_sdk::test_utils
模块
运行单元测试
cargo test
集成测试需要使用 workspaces, 会在本地起一个 sandbox, 模拟链上环境, 可以进行外部测试. 有 workspaces-rs 和 workspaces-js 两种版本. 其中 JS 版本更加契合外部调用合约的习惯, 因此本教程选择 JS 版本
pnpm add near-workspaces -D
workspaces 并不具备测试能力, 因此需要配合测试框架使用, 本教程使用 jest 作为测试框架
pnpm add ts-jest jest @types/jest -D
在 jest.config.json 中配置 jest
{
"preset": "ts-jest",
"detectOpenHandles": true,
"testTimeout": 60000
}
jest 会自动寻找后缀为 .sepc.ts
或 .test.ts
的文件并执行测试代码
pnpm test
make all