模拟react-native-keychain,未定义不是一个函数

Flo*_*ber 5 typescript reactjs jestjs react-native react-native-keychain

我正在尝试为我的辅助函数编写一个测试,它使用react-native-keychain 库。

据此,我根据文档嘲笑了该库。

我在该目录下添加了一个目录react-native-keychain __mocks__,并添加了以下代码:

const keychainMock = {  
SECURITY_LEVEL_ANY: 'MOCK_SECURITY_LEVEL_ANY',
SECURITY_LEVEL_SECURE_SOFTWARE: 'MOCK_SECURITY_LEVEL_SECURE_SOFTWARE',
SECURITY_LEVEL_SECURE_HARDWARE: 'MOCK_SECURITY_LEVEL_SECURE_HARDWARE',
setGenericPassword: jest.fn().mockResolvedValue(),
getGenericPassword: jest.fn().mockResolvedValue(),
resetGenericPassword: jest.fn().mockResolvedValue(),
};
export default keychainMock;
Run Code Online (Sandbox Code Playgroud)

我的辅助函数调用 getGenericPassword 方法。

{
getGenericPassword().then(genericPassword => {
  if (genericPassword) {
    setUser({jwt: genericPassword.password, authorities: []});
  }
});
}
Run Code Online (Sandbox Code Playgroud)

我的测试如下所示:

describe('AuthProvider', () => {

test('Snapshot', () => {
const component = renderer.create(
  <AuthProvider>
    <MockComponent />
  </AuthProvider>,
);

expect(component.toJSON()).toMatchSnapshot();
});
Run Code Online (Sandbox Code Playgroud)

运行测试时出现以下错误:

TypeError: (0 , _reactNativeKeychain.getGenericPassword) is not a function
Run Code Online (Sandbox Code Playgroud)

包.json:

"react": "17.0.2",
"react-native": "0.68.1",
"react-native-keychain": "^8.0.0",
"jest": "26.6.3",
Run Code Online (Sandbox Code Playgroud)

所以模拟似乎可以工作,因为它没有调用真正的方法,但 jest.fn() 也没有。

我缺少什么?