Javascript 如何处理大量“MockImplementationOnce”调用
我正在为一个有很多请求的类编写集成测试。请求通过Javascript 如何处理大量“MockImplementationOnce”调用,javascript,node.js,mocking,jestjs,tdd,Javascript,Node.js,Mocking,Jestjs,Tdd,我正在为一个有很多请求的类编写集成测试。请求通过HttpClientsingleton完成 因此,为了避免发出真正的请求,我模拟了对HttpClient的所有调用。问题是,我有太多的要求 调用HttpClient.get获取令牌 调用HttpClient.get获取资源 调用HttpClient.get从该资源获取所有客户 调用HttpClient.get以验证另一个API中是否存在单个客户 条件:HttpClient.post被调用以将这一个客户添加到API中(如果它不存在) 调用HttpCl
HttpClient
singleton完成
因此,为了避免发出真正的请求,我模拟了对HttpClient
的所有调用。问题是,我有太多的要求
HttpClient.post
被调用以将这一个客户添加到API中(如果它不存在)mockImplementationOnce
编写了一个“愉快”的场景——一切顺利。我的beforeach
看起来有点像这样:
tokenResponse = { body: { token: 'some-token'}, status: 200 }
HttpClient.get.mockImplementationOnce(() => tokenResponse)
tokenResource = { body: <some-fixture-with-resources>, status: 200 }
HttpClient.get.mockImplementationOnce(() => tokenResource
(...)
describe('Integration test', () => {
beforeEach(() => {
setupMocks()
})
it('goes well', () => {
expect(myClass.execute()).resolves.toBe(true)
})
it('fails to fetch the token', () => {
overrideMocks('token-failed')
expect(myClass.execute()).rejects.toEqual('some-error')
})
(...)
})
无论如何,我设法为所有场景编写了简单的测试用例,但是我的beforeach
有一个巨大的样板。除此之外,现在我想编写更高级的测试用例,其中一个请求被多次执行(n个客户>1个)。处理所有装置和跟踪单个模拟变得相当复杂
这是一个普遍的问题吗?有没有更简单的方法来处理模拟实现?我想到了类似于mockImplementationNth
的东西,但找不到任何东西
注:更改代码本身很难,因为它是遗留代码,API有点笨重。我考虑将场景隔离到一个
setupMocks
函数中,该函数具有默认设置,可以在测试用例中用另一个函数覆盖。它看起来像这样:
tokenResponse = { body: { token: 'some-token'}, status: 200 }
HttpClient.get.mockImplementationOnce(() => tokenResponse)
tokenResource = { body: <some-fixture-with-resources>, status: 200 }
HttpClient.get.mockImplementationOnce(() => tokenResource
(...)
describe('Integration test', () => {
beforeEach(() => {
setupMocks()
})
it('goes well', () => {
expect(myClass.execute()).resolves.toBe(true)
})
it('fails to fetch the token', () => {
overrideMocks('token-failed')
expect(myClass.execute()).rejects.toEqual('some-error')
})
(...)
})
至少测试用例看起来更简单