以下是我要测试的修改后的较短版本。
var Service = (function() {
function doStuff(command, package) {
var response = ""
switch(command) {
case "A":
response = a(package);
break;
case "B":
response = b(package);
break;
case "C":
response = c(package);
break;
default:
// should never get here
response = "NOPE!";
}
return response;
}
function a(package) {
// do stuff
}
function b(package) {
// do stuff
}
function c(package) {
// do stuff;
}
return {
doStuff: doStuff,
a: a,
b: b,
c: c
}
});
module.exports = Service;
所以基本上,我正在尝试编写一个单元测试来测试doStuff方法,但是当它遇到每个案例时,我只想对像a,b或c这样的方法做间谍,而不是检查输出返回值,因为每个函数a,b和c都返回true或false。因此,我不想仅仅针对真或假进行测试,而是确保正确的案例是他的。
我无法通过当前编码的方式找出一种方法。我的这个类的测试文件正在创建一个新的实例,我试图监视这些方法,但这没有用,因为它们没有在这个代码中的实际实例上调用,它们在本地调用。间谍有可能这样做吗?如果没有,以这种方式测试的推荐方法是什么?
答案 0 :(得分:0)
这不起作用吗?
var service = new Service();
const aSpy = spyOn(service, 'a').and.returnValue(true);
// setup the routing they way you want it
service.command = "A";
var res = service.doStuff(someTestPackage);
expect(aSpy).toHaveBeenCalledWith(someTestPackage);
expect(res).toBeTruthy();