unit-testing - 如何模拟根据接收到的参数返回不同值的方法?
问题描述
我有一个根据接收到的参数返回不同值的方法
const myAPI = {
getRepository: async data => await connectDB(data)
}
userService = {
create: async data => {
const user = await getRepository('User').save(data.user)
const image = await getRepository('Image').save(data.image)
// this code shows that returned values matter
if (user & image) {
return { user, image }
} else if (user) {
return { user }
} else if (image) {
return { image }
} else {
return {}
}
}
}
这是我的模拟
import { createSandbox } from 'sinon'
const mock = createSandbox().mock(myAPI)
mock
.expects('getRepository')
.withArgs('User')
.returns(fakeUser)
.withArgs('Image')
.returns(fakeImage)
(async () => await userService.create({ user, image }))()
我有以下错误
ExpectationError: Unexpected call: getRepository(function User() {})
Expected getRepository([function Image() {}, function User() {}][, ...]) once (never called)
我的代码应该如何看起来才能使模拟正常工作?
解决方案
推荐阅读
- python - 尝试使用正则表达式构建 tkinter 网络爬虫
- python - 就地更新 xarray 中的属性
- java - Python位移到java
- spring-boot - 如何使用 spring-boot gradle 插件进行 proguard
- android - 使用 react-native 编写的应用程序在构建 apk/ipa 之前进行安全扫描是否有好处?
- lvm - iSCSI LVM 配置无法在重新启动后继续存在
- excel - 在 Visual Studio Community 2017 中使用 Visual Basic 打开 Microsoft Excel 文件
- sql - 在 SQL Server 的表中存储带有操作数的运算符
- visual-studio-code - VS Code:编辑文件中两个点的快捷方式
- assembly - x86 汇编输出错误?