如何在笑话中窥探相同的方法但两个不同的参数?


jest
.spyOn(webService.prototype, 'isEnabled')
.mockImplementation(() => {
return Promise.resolve(true)
})
jest
.spyOn(webService.prototype, 'isEnabled')
.mockImplementation(() => {
return Promise.resolve(false)
})

所以我想要的是返回'true'如果参数有'YES'字符串在它。如果参数中包含'NO',则返回'false'。

函数的typescript如下…

public isEnabled(featureId: string): Promise<boolean> {
return this.toggle.isEnabled(featureId)
}

jonrsharpe在评论中有正确的想法。您可以向spy添加模拟实现,并执行类似

的操作。
jest.spyOn(webService.prototype, 'isEnabled')
.mockImplementation((yesOrNo: string) => {
if (yesOrNo.includes('YES')) {
return true;
} else {
return false;
}
});

现在它对YESNO参数都有效。当然,你可以根据自己的需要添加和定制更多的逻辑。

除了上一个答案,我将创建一个实用程序函数来模拟该方法,这样您就可以在每次测试执行后初始化并清除它,类似于:

util:

const webServiceMock = {
init(isEnabled) {
jest.spyOn(webService.prototype, 'isEnabled')
.mockImplementation(() => isEnabled);
},
destroy() {
jest.clearAllMocks();
}
};

测试:

describe('webService', () => {
afterEach(() => {
webServiceMock.destroy();
});
test('is enabled', () => {
webServiceMock.init(true);
expect(webService.isEnabled()).toBe(true);
});
test('is disabled', () => {
webServiceMock.init(false);
expect(webService.isEnabled()).toBe(false);
});
});

最新更新