有很多类似的问题,但我找不到任何可以解决我的问题。
我正在使用 jest.mock 来模拟 Plaid 库,如下所示:
jest.mock('plaid', () => ({
Configuration: jest.fn(),
PlaidApi: jest.fn(() => ({
linkTokenCreate: jest.fn(),
itemPublicTokenExchange: jest.fn(),
transactionsSync: jest.fn(),
})),
PlaidEnvironments: {
sandbox: 'https://sandbox.plaid.com',
},
}))
然后像这样初始化它:
describe('Plaid', () => {
let plaid: Plaid
let plaidApiMock: jest.Mocked<PlaidApi>
beforeAll(() => {
plaidApiMock = new PlaidApi({} as Configuration) as jest.Mocked<PlaidApi>
plaid = new Plaid()
})
// ... the rest of the tests
其中
Plaid
是我正在测试的包装类。但在测试中,包装类和测试仍然使用真实的库PlaidApi
。这正是我在其他测试中用来模拟库的方法,并且它有效,所以我在这里真的迷失了。
我找到了一个潜在的解决方案,即将我的模拟代码更改为:
jest.mock('plaid', () => ({
__esModule: true,
default: {
Configuration: jest.fn(),
PlaidApi: jest.fn(() => ({
linkTokenCreate: jest.fn(),
itemPublicTokenExchange: jest.fn(),
transactionsSync: jest.fn(),
})),
PlaidEnvironments: {
sandbox: 'https://sandbox.plaid.com',
},
},
}))
这没有改变任何事情。
您能帮助我,告诉我去哪里寻找或者分享您的经验吗?谢谢你。
同事的建议:“我注意到你提到有自己的 Plaid 包装类。由于它似乎是用
plaid = new Plaid()
构建的,因此可能会在 PlaidApi
的构造函数中创建一个单独的 Plaid
,这将与您之前在测试设置过程中创建的 plaidApiMock
不同。一个建议可能是重构,以便 Plaid
包装类的构造函数采用 PlaidApi
作为参数,并将 plaidApiMock
传递给 for 。单元测试。”