使用 Jest 运行 testing-library/react-native 时 RNEncryptedStorage 未定义

Posted

技术标签:

【中文标题】使用 Jest 运行 testing-library/react-native 时 RNEncryptedStorage 未定义【英文标题】:RNEncryptedStorage is undefined while running testing-library/react-native with Jest 【发布时间】:2021-08-27 02:41:16 【问题描述】:

我正在尝试使用 react-native-testing-library 和 Jest 设置我的 react-native 测试环境。我的 react-native 应用程序使用 react-native-encrypted-storage。当我运行我的第一个示例测试(下面的代码)时,它说 RNEcryptedStorage 未定义。

import React from "react";
import "react-native";
// Note: test renderer must be required after react-native.
import renderer from "react-test-renderer";
import App from "../App";
    
it("renders correctly", () => 
    console.log("Rendering");
    renderer.create(<App />);
);

完全错误:

RNEncryptedStorage 未定义

在对象。 (node_modules/react-native-encrypted-storage/lib/commonjs/EncryptedStorage.ts:7:9) 在对象。 (node_modules/react-native-encrypted-storage/lib/commonjs/index.ts:1:1)

这是我第一次设置我的测试环境,所以不知道从哪里开始解决这个问题。

【问题讨论】:

你做到了吗? @HradeshKumar 不,我放弃了这种测试方式,因为大多数服务/功能都需要被嘲笑,据我说不会给出真正的测试结果 【参考方案1】:

您可以在测试期间通过将react-native 模拟添加到您的__mocks__ 文件夹来模拟RNEncryptedStorage 本机模块。

// tests/__mocks__/react-native.js

module.exports = 
    NativeModules: 
        RNEncryptedStorage: 
            setItem: jest.fn(() => Promise.resolve()),
            getItem: jest.fn(() => Promise.resolve(' "foo": 1 ')),
            removeItem: jest.fn(() => Promise.resolve()),
            clear: jest.fn(() => Promise.resolve())
        
    

【讨论】:

来源:github.com/emeraldsanto/react-native-encrypted-storage/blob/…【参考方案2】:

上述方法可行,但如果您模拟 react-native 的其他方面,则可能会与其他模拟产生问题。如果您想自己模拟 RNEncryptedStorage,您可以尝试对上述解决方案稍作改动:

__mocks__/react-native-encrypted-storage/index.js


const RNEncryptedStorage = 
  setItem: jest.fn(() => Promise.resolve()),
  getItem: jest.fn(() => Promise.resolve(' "foo": 1 ')),
  removeItem: jest.fn(() => Promise.resolve()),
  clear: jest.fn(() => Promise.resolve()),
;

export default RNEncryptedStorage;

【讨论】:

以上是关于使用 Jest 运行 testing-library/react-native 时 RNEncryptedStorage 未定义的主要内容,如果未能解决你的问题,请参考以下文章

如何创建 GitHub Action 以使用 Yarn 运行 Jest 测试?

使用 Jest、Vue、Vuetify 和 Pug 运行单元测试

如何让 Jest 按特定顺序运行测试?

运行测试时出错 - jest.mock 不是函数

使用 express 完成测试运行后一秒钟 Jest 没有退出

使用 webpack 配置运行 Jest 测试