我在类别中的类上有一个方法,如下所示:
class validator {
checkAThing(errors: string[], thing: string): Promise<string[]> {
// returns a promise
}
}
我想使用typemoq
来模拟这个所以我有类似的东西:
let mock = TypeMoq.Mock.ofType(validator);
mock.setup(x => x.checkAThing(??????, TypeMoq.It.isAnyString()))
.returns((x, y) => {
return Promise.resolve(x);
})
问题是我不确定如何为第一个接受任何字符串数组的字符串[]指定匹配器?
如果Typemoq无法使用其他模拟技术,我很高兴。
答案 0 :(得分:3)
如果你只是设置一个回报并且不关心它所调用的param值,那么你可以使用It.isAny()
。
// will always return the specified value (regardless of what it's called with)
mock.setup(x => x.checkAThing(TypeMoq.It.isAny(), TypeMoq.It.isAny()))
.returns((x, y) => {
return Promise.resolve(x);
})
如果您真的关心使用string[]
调用模拟器,您可以通过执行类似的操作来使用typemoq的谓词匹配器(尽管看起来有点矫枉过正):
TypeMoq.It.is<string[]>(param =>
Array.isArray(param) && param.every(item => typeof item === "string");
答案 1 :(得分:0)
我已经尝试了It.isAny()和It.is()并得到错误。
connectionManagementService.setup(x => x.getConnectionGroups(TypeMoq.It.is<string[]>(s => s[0] === Constants.sqlLogin))).returns(() => [conProfGroup]);
Error: the object {
"ctx": {"_args": "[object Arguments]""_property": {"name": "getConnectionGroups"
"obj": {
"onAddConnectionProfile": [undefined]
"onConnectionChanged": [undefined]
"onDeleteConnectionProfile": [undefined]
"onLanguageFlavorChanged": [undefined]
}
} } "message": [undefined] "name": "Mock Exception" "reason": "no setup expression" } was thrown, throw an Error :)