如何使用 Sinon 测试两个等待在一条线上



我想存根一些有两个等待的代码。


import { githubApi } from "../../githubApi";
export async function getMembers (projectName) {
const members = await (await githubApi(projectName)).projects
.members({
id: 'xxx'
});
return members;
}

如何使用 Sinon 来模拟await (await githubApi(projectName)).projects .member? 谢谢

尽管示例中的 API 似乎很难测试,但我会假设这已被考虑在内,并且githubApi在某种程度上是可模拟的。

let membersFake = sinon.fake().resolves([member1, member2, member3]);
let githubApiFake = sinon.fake().resolves({
projects: {
members: membersFake
}
});

然后你可以用假货替换githubApi。现在,如果githubApi不容易被模拟并且您不拥有该文件,那么值得研究一些依赖注入。

export async function getMembers (projectName, githubApi = githubApi) {
...
}

通过这种方式,您可以在单元测试中测试函数时直接传入您的假货,但在您的应用程序代码中,它将默认为导入的真实函数。

最新更新