问题标签 [react-native-testing-library]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
200 浏览

javascript - React-Native 测试库/Jest:无法读取属性“TouchableOpacity”

我正在使用 jest 和 react-native 测试进行一些测试,问题是无法识别 TouchableOpacity 并导致错误

Card.test.js

Card.js

当我运行测试时,它显示“无法读取未定义的属性‘TouchableOpacity’”,当我更改 View 的 TouchableOpacity 时,它运行正常

0 投票
0 回答
293 浏览

react-native - fireEvent.press 不工作(反应本机测试库)

我正在为我的 React Native 项目编写单元测试。我的主屏幕是 WelcomScreen.js,里面是使用 TouchableOpacity 创建的自定义按钮:

以下是称为 onPress 事件的方法:

以下是对它的测试:

但它给了我以下错误:

我正在遵循官方指南并做完全相同的事情。但它不会在组件上触发 onPress 事件。我做错了什么?

0 投票
0 回答
28 浏览

javascript - Jest / RN 测试库 redux dispatch 永远不会完成

我正在编写一个测试来检查更新 TextInput 并模糊它是否会在更改发送到我的 Rails 服务器后保存对我的人状态的更改。

这目前 100% 在生产中工作,但试图围绕这个编写测试让我发疯。似乎dispatch()启动我的操作的 redux 函数永远不会返回和/或完成,并且测试在我看到商店更改之前完成。

我已经搜索了整个谷歌并且没有看到其他人真正抱怨这个所以IDK如果代码设置或测试有问题。

测试

屏幕/视图

usePersonStore 钩子

PersonAction (redux)

运行测试时,我发现它永远不会更新,并且console.log永远dispatch(PersonAction.updatePerson)不会打印出来。

0 投票
1 回答
39 浏览

unit-testing - React Native 测试库中的 Enzyme element.props()

我需要重构所有酶单元测试以反应原生测试库。

在 Enzyme 中,要获得子元素的道具,我可以使用以下内容:

((rootElement.props() as Props).prop).toBe(value).

prop() 函数返回包装器当前节点的 props 哈希。注意:只能在单个节点的包装器上调用。

我怎样才能在反应原生测试库中做同样的事情?

我应该只将完整路径传递给道具吗?像这样:

还是有其他方法可以做到这一点?

0 投票
0 回答
112 浏览

reactjs - React Native:如何测试 `maxLength` 和 `keyboardType` 道具以及其他输入道具?

我有一个InputAddressZipCode仅用于 5 位美国邮政编码的组件。我可以onChangeText使用react-test-rendererand进行测试@testing-library/react-native,但测试接受任何文本,例如 string ab。但是,此输入应仅接受以下内容:

  • 5 位数 ( maxLength={5})
  • 数字键盘 ( keyboardType="numeric")

如何使用 React Native 测试以下上述道具?

InputAddressZipCode.tsx:

InputAddressZipCode.test.tsx:

0 投票
1 回答
500 浏览

react-native - 如何在useEffect(func,[])中使用异步api调用中的setState钩子测试组件

我在使用 react-native-testing-library 对组件进行单元测试时遇到问题。

我有一个这样的组件:

我像这样测试它:

测试将失败/通过

Attempted to log "Warning: An update to TestComponent inside a test was not wrapped in act(...).指向使用setData效果。

我尝试用 包装渲染,用 包装act()断言act(),不模拟 api 调用,将整个测试包装在 中act(),但错误不会消失。

对于这种情况,我已经尝试查看测试库文档/git/q&a,也搜索了 stackoverflow 问题,但我仍然无法使这个测试有效。

谁能指出我解决这个问题的正确方向?

注意:我不是要测试实现细节。我只想测试给定获取结果 X,组件将按预期呈现,即呈现 10 个列表项。

0 投票
0 回答
258 浏览

typescript - 如何使用 React Native 测试库对 Yup .test() 方法进行单元测试?

我有一个 Formik,它是这样的:

当在字段中输入用户名时,模式将与服务器检查是否username已经通过调用checkUserHandleExist函数内部的.test()函数来获取。

是的架构:

为了使用 React-Native-testing-library 对其进行测试,这是我的测试:

正如您在此处看到的,我模拟了 API 方法以true作为结果返回(在 Yup 测试函数中)。

然后errorMsg应该根据我的代码存在。

现在问题

当我queryByText为这Already used句话时,它总是得到这个消息Error: expect(received).not.toBeNull()

我试过的:

  1. 我认为我应该wait显示错误消息,所以我尝试了这个:

有同样的错误。

  1. 我也尝试过使用getByTextfindByText也有这个错误 Error: expect(received).not.toBeNull()

  2. 我什至尝试不使用waitFor

我不知道为什么会这样。既然我已经waitFor它应该等到errorMsg出现。但它没有。我的所有其他测试用例max和Yup 模式都通过了,只是min没有通过。不知道为什么。matchestest

请提供一些帮助。提前致谢。

0 投票
0 回答
285 浏览

react-native - 如何使用 React 本机测试库对 ImagePicker Expo 中的功能进行单元测试?

我在react-native使用expo时有下面的代码,这是一个按钮,单击button将调用ImagePicker.requestMediaLibraryPermissionsAsync(),如果授予权限,则调用ImagePicker.launchImageLibraryAsync()以让用户选择图像。

我使用 React-native-testing-libary。

这段代码工作正常,但我开玩笑的测试一直失败,我在下面告诉它失败的地方。

这是我的测试,首先我expo-image-picker使用上面提到的 2 个函数及其解析值来模拟模块:

这是我的代码供您参考:

然后这是我在测试用例中所做的。

如您所见,在我的测试用例中,它会触发一个按钮,然后调用ImagePicker.requestMediaLibraryPermissionsAsync它来解决status: 'granted',这与我的代码相同。

既然status:granted,那么这个函数ImagePicker.launchImageLibraryAsync()应该被调用。

但是现在,expect(ImagePicker.requestMediaLibraryPermissionsAsync).toBeCalledTimes(1)是pass,但是这条线 expect(ImagePicker.launchImageLibraryAsync).toBeCalledTimes(1)不是pass。

我试过的:

我都试过了,expect我把它包装在这样的里面waitFor()

但是错误仍然相同,launchImageLibraryAsync()永远不会被调用。

问题:

  1. 什么原因导致launchImageLibraryAsync()没有被调用?以及如何解决这个问题。

  2. 我想我需要等待requestMediaLibraryPermissionsAsync完成解决,然后才会launchImageLibraryAsync()被调用。但我该怎么做呢?如您所见,我已经用 包装了它waitFor(),但错误仍然存​​在。

0 投票
0 回答
857 浏览

typescript - 如何使用 TypeScript 在 React Native monorepo 中正确配置 jest 单元和组件测试

所以,我的问题有点难以描述,因为我们的存储库(它正在工作,所以很遗憾我不能只提供它的链接)相当大而且很复杂,但我会尽力而为。首先,问题:

问题

我运行jest,结果如下所示:

对于从我们的 monorepo 中导入任何内容(通过@packages/别名)的所有文件测试,错误消息都是相同的——包括。完全相同的组件,IconWithBadge显然无法导入Metrics模块。有关我们当前所有测试套件的完整输出,请参见下文。

对我来说,这似乎是相对明显的,这一定是某种编译错误,因为这里需要注意的重要一点是:

在 React Native 上下文中,所有这些代码都可以正常工作!

意思是,像往常一样通过命令构建和运行应用程序时react-native,一切正常,我没有收到任何错误。只有在jest测试的上下文中,我才会收到此错误。

另外,假设我删除了Metricsfrom的所有实例IconWithBadgejest再次运行。Metrics然后,它会奇迹般地找到另一个导入的文件undefined

现在,为了让您大致了解我们的存储库的结构和配置方式,让我们看一下环境。

环境

我们有一个类似于以下结构的 monorepo:

我们在 repo 中有组件测试(通过jest-nativeRN 测试库)和简单的单元测试。我们也有detox测试,你可以从目录的存在中推断出来e2e,但目前这并不重要。

所有代码(测试应用程序代码)都是用 TypeScript 编写的,对于 React Native 部分,它都是通过 Babel 编译的,这是RN 团队推荐的。然而,对于测试,我已配置ts-jest将代码编译为 CommonJS,这是jest. 它专门配置为编译 TypeScript 代码ttypescriptbabel-jest用于所有 JavaScript 代码。

为了向您展示它是如何配置的,我将在此处粘贴我最重要的配置:

配置

笑话配置

由于我们使用Expo 的 unimodules,我们也jest-expo安装了,它正确设置了 jest-testing 的 Expo 端。考虑到这ts-jest一点,我们jest.config.js看起来像这样:

通天塔配置

./get-babel-config.js

./app-directory/babel.config.js

./babel.config.js

打字稿配置

./tsconfig.json

./tsconfig.spec.json

打包 JSON

./package.json

./app-directory/package.json

概括

这应该是所有相关信息。如果有任何遗漏/您需要任何其他信息,请告诉我!总结一下这个问题:

为什么jest在正常开发/生产过程中完全正常工作时无法解决此包?我怎样才能解决这个问题?

在这里请教所有jest专家!我希望你能帮助我。谢谢!

0 投票
2 回答
642 浏览

typescript - 开玩笑的模拟尺寸不变

我是第一次做测试,所以我很确定我做错了什么。

我正在编写测试用例,我的组件在内部执行此操作。

对于我的测试用例,我正在考虑尺寸为 的 iPhone 11 width: 414, height:896,并且我希望在所有测试用例中保持一致。

750在测试设置宽度为和高度为时反应本机测试库1334

我想将其更改为 iPhone 11 尺寸,我在网上搜索并找到了jest.mock用于更改功能的文章。

所以我做了这样的事情

Home组件有console.log(width, height),但它仍然给出宽度为 750 和高度为 1334 (因为我的测试用例失败了)。

我该如何解决?