集成测试
May 4, 2020 · View on GitHub
前言
前两篇篇文章讲述了普通的单元测试和服务的单元测试,其中第二篇利用run模块执行子进程进行启动服务,等测试完毕或异常就关闭服务。 现实项目中除了单元测试,等项目发布或者上线都要对所有单元测试进行合并测试,这就是最原始集成测试。
上一篇的测试进阶是利用run开启服务子进程进行测试,本篇的集成测试也是利用run模块,将所有单元测试作为一个个子进程逐步启动测试。
实现步骤
- 步骤1:准备各个单元测试目录下的入口文件
test.ts,设置所有单元测试的子进程列表。 - 步骤2:利用
AsyncIterableIterator迭代执行每个子进程,将stdout标准输出捕获打印出来
具体例子
demo地址
https://github.com/chenshenhai/deno-note/tree/master/demo/testing_integrate
具体集成测试源码
./demo/testing_integrate/test.js
#!/usr/bin/env deno test --allow-all test.ts
const decoder = new TextDecoder();
// 这里的单元测试例子 是前两篇的单元测试
// https://github.com/chenshenhai/deno-note/tree/master/demo/testing_unit
// https://github.com/chenshenhai/deno-note/tree/master/demo/testing_integrate
const testUnitRunList = [
{
cmd: [Deno.execPath(), "run", "--allow-run", "--allow-net", "test.ts", "--", ".", "--cors"],
cwd: "./../testing_unit",
stdout: "piped"
},
{
cmd: [Deno.execPath(), "run", "--allow-run", "--allow-net", "test.ts", "--", ".", "--cors"],
cwd: "./../testing_progress",
stdout: "piped"
}
]
async function runUnitTest(opts: Deno.RunOptions): Promise<string> {
const unitTest = Deno.run(opts);
const outStream = await unitTest.output();
const output = decoder.decode(outStream);
return output
}
async function *runAllUnitTest(optsList: any[]): AsyncIterableIterator<any[]>{
for (let i = 0; i < optsList.length; i++) {
let err = null;
let log = null;
const opts: Deno.RunOptions = optsList[i];
try {
log = await runUnitTest(opts);
} catch (e) {
err = e;
}
yield [err, log];
}
}
async function main() {
for await(const [err, log] of runAllUnitTest(testUnitRunList)) {
if (err) {
throw new Error(err);
} else {
console.log(log);
}
}
}
main();
执行单元测试
deno run --allow-all test.ts
