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