问题标签 [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.
javascript - React-Native 测试库/Jest:无法读取属性“TouchableOpacity”
我正在使用 jest 和 react-native 测试进行一些测试,问题是无法识别 TouchableOpacity 并导致错误
Card.test.js
Card.js
当我运行测试时,它显示“无法读取未定义的属性‘TouchableOpacity’”,当我更改 View 的 TouchableOpacity 时,它运行正常
react-native - fireEvent.press 不工作(反应本机测试库)
我正在为我的 React Native 项目编写单元测试。我的主屏幕是 WelcomScreen.js,里面是使用 TouchableOpacity 创建的自定义按钮:
以下是称为 onPress 事件的方法:
以下是对它的测试:
但它给了我以下错误:
我正在遵循官方指南并做完全相同的事情。但它不会在组件上触发 onPress 事件。我做错了什么?
javascript - Jest / RN 测试库 redux dispatch 永远不会完成
我正在编写一个测试来检查更新 TextInput 并模糊它是否会在更改发送到我的 Rails 服务器后保存对我的人状态的更改。
这目前 100% 在生产中工作,但试图围绕这个编写测试让我发疯。似乎dispatch()
启动我的操作的 redux 函数永远不会返回和/或完成,并且测试在我看到商店更改之前完成。
我已经搜索了整个谷歌并且没有看到其他人真正抱怨这个所以IDK如果代码设置或测试有问题。
测试
屏幕/视图
usePersonStore 钩子
PersonAction (redux)
运行测试时,我发现它永远不会更新,并且console.log
永远dispatch(PersonAction.updatePerson)
不会打印出来。
unit-testing - React Native 测试库中的 Enzyme element.props()
我需要重构所有酶单元测试以反应原生测试库。
在 Enzyme 中,要获得子元素的道具,我可以使用以下内容:
((rootElement.props() as Props).prop).toBe(value)
.
prop() 函数返回包装器当前节点的 props 哈希。注意:只能在单个节点的包装器上调用。
我怎样才能在反应原生测试库中做同样的事情?
我应该只将完整路径传递给道具吗?像这样:
还是有其他方法可以做到这一点?
reactjs - React Native:如何测试 `maxLength` 和 `keyboardType` 道具以及其他输入道具?
我有一个InputAddressZipCode
仅用于 5 位美国邮政编码的组件。我可以onChangeText
使用react-test-renderer
and进行测试@testing-library/react-native
,但测试接受任何文本,例如 string ab
。但是,此输入应仅接受以下内容:
- 5 位数 (
maxLength={5}
) - 数字键盘 (
keyboardType="numeric"
)
如何使用 React Native 测试以下上述道具?
InputAddressZipCode.tsx:
InputAddressZipCode.test.tsx:
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 个列表项。
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()
。
我试过的:
- 我认为我应该
wait
显示错误消息,所以我尝试了这个:
有同样的错误。
我也尝试过使用
getByText
。findByText
也有这个错误Error: expect(received).not.toBeNull()
。我什至尝试不使用
waitFor
:
我不知道为什么会这样。既然我已经waitFor
它应该等到errorMsg
出现。但它没有。我的所有其他测试用例max
和Yup 模式都通过了,只是min
没有通过。不知道为什么。matches
test
请提供一些帮助。提前致谢。
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()
永远不会被调用。
问题:
什么原因导致
launchImageLibraryAsync()
没有被调用?以及如何解决这个问题。我想我需要等待
requestMediaLibraryPermissionsAsync
完成解决,然后才会launchImageLibraryAsync()
被调用。但我该怎么做呢?如您所见,我已经用 包装了它waitFor()
,但错误仍然存在。
typescript - 如何使用 TypeScript 在 React Native monorepo 中正确配置 jest 单元和组件测试
所以,我的问题有点难以描述,因为我们的存储库(它正在工作,所以很遗憾我不能只提供它的链接)相当大而且很复杂,但我会尽力而为。首先,问题:
问题
我运行jest
,结果如下所示:
对于从我们的 monorepo 中导入任何内容(通过@packages/
别名)的所有文件测试,错误消息都是相同的——包括。完全相同的组件,IconWithBadge
显然无法导入Metrics
模块。有关我们当前所有测试套件的完整输出,请参见下文。
对我来说,这似乎是相对明显的,这一定是某种编译错误,因为这里需要注意的重要一点是:
在 React Native 上下文中,所有这些代码都可以正常工作!
意思是,像往常一样通过命令构建和运行应用程序时react-native
,一切正常,我没有收到任何错误。只有在jest
测试的上下文中,我才会收到此错误。
另外,假设我删除了Metrics
from的所有实例IconWithBadge
并jest
再次运行。Metrics
然后,它会奇迹般地找到另一个导入的文件undefined
。
现在,为了让您大致了解我们的存储库的结构和配置方式,让我们看一下环境。
环境
我们有一个类似于以下结构的 monorepo:
我们在 repo 中有组件测试(通过jest-native和RN 测试库)和简单的单元测试。我们也有detox
测试,你可以从目录的存在中推断出来e2e
,但目前这并不重要。
所有代码(测试和应用程序代码)都是用 TypeScript 编写的,对于 React Native 部分,它都是通过 Babel 编译的,这是RN 团队推荐的。然而,对于测试,我已配置ts-jest将代码编译为 CommonJS,这是jest
. 它专门配置为编译 TypeScript 代码ttypescript
并babel-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
专家!我希望你能帮助我。谢谢!
typescript - 开玩笑的模拟尺寸不变
我是第一次做测试,所以我很确定我做错了什么。
我正在编写测试用例,我的组件在内部执行此操作。
对于我的测试用例,我正在考虑尺寸为 的 iPhone 11 width: 414, height:896
,并且我希望在所有测试用例中保持一致。
750
在测试设置宽度为和高度为时反应本机测试库1334
。
我想将其更改为 iPhone 11 尺寸,我在网上搜索并找到了jest.mock
用于更改功能的文章。
所以我做了这样的事情
Home
组件有console.log(width, height)
,但它仍然给出宽度为 750 和高度为 1334 (因为我的测试用例失败了)。
我该如何解决?