欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

详解如何在项目中使用jest测试react native组件

程序员文章站 2022-04-23 17:10:49
目前javascript的测试工具很多,但是针对react的测试策略,facebook推出的reactjs标配测试工具是jest.jest的官网地址:。我们可以看到jest...

目前javascript的测试工具很多,但是针对react的测试策略,facebook推出的reactjs标配测试工具是jest.jest的官网地址:。我们可以看到jest官网宣称的是:painless javascript testing。是facebook用于测试服务和react应用程序的javascript单元测试框架。

所谓单元测试也就是对每个单元进行测试,通俗的将一般针对的是函数,类或单个组件,不涉及系统和集成。单元测试是软件测试的基础测试。jest主要有以下特点:

  1. 适应性:jest是模块化、可扩展和可配置的。
  2. 沙箱和快速:jest虚拟化了javascript的环境,能模拟浏览器,并且并行执行
  3. 快照测试:jest能够对react 树进行快照或别的序列化数值快速编写测试,提供快速更新的用户体验。
  4. 支持异步代码测试:支持promises和async/await
  5. 自动生成静态分析结果:不仅显示测试用例执行结果,也显示语句、分支、函数等覆盖率。

为什么要使用单元测试工具

我们在开发过程中,不使用测试工具依然可以自己写代码进行单元测试,但是我们的代码存在着相互调用关系,在测试过程中我们又希望使单元相对独立而又能正常运行,就需要我们对被测函数的依赖函数和环境进行mock,并且在测试数据输入、测试执行和测试结果检查方面存在很多相似性,测试工具正是为我们在这些方面提供了方便。

准备阶段

需要一个rn项目,这里演示的是我个人的项目reactnative-reduxsaga-todo

安装jest

如果你是用react-native init命令行创建的rn项目,并且你的rn版本在0.38以上,则无需安装了。不太清楚的话就看一下

package.json文件中是否包含以下代码:

 // package.json
 "scripts": {
  "test": "jest"
 },
 "jest": {
  "preset": "react-native"
 }

如果没有就安装一下npm i jest --save-dev,并把上述代码添加到package.json文件的对应位置。

以上步骤完成后,简单运行npm run test测试一下jest是否配置成功。但我们没有写测试用例,终端会打印no tests found。这时就配置完成了。

快照测试

写一个组件

import react from 'react';
import {
 text, view,
} from 'react-native';

import proptypes from 'prop-types';

const postarea = ({ title, text, color }) => (
 <view style={{ backgroundcolor: '#ddd', height: 100 }}>
  <text style={{ fontsize: 30 }}>{title}</text>
  <text style={{ fontsize: 15, color }}>{text}</text>
 </view>
);

export default postarea;

在项目根目录下找到__test__文件夹,现在,让我们使用react的测试渲染器和jest的快照功能来与组件进行交互,并捕获呈现的输出并创建一个快照文件。

// postarea_test.js
import 'react-native';
import react from 'react';
import postarea from '../js/twitter/postarea';

import renderer from 'react-test-renderer';

test('renders correctly', () => {
 const tree = renderer.create(<postarea title="title" text="text" color="red" />).tojson();
 expect(tree).tomatchsnapshot();
});

然后在终端运行npm run test或jest。将会输出:

pass  __tests__\postarea_test.js (6.657s)
  √ renders correctly (5553ms)

 › 1 snapshot written.
snapshot summary
 › 1 snapshot written in 1 test suite.

test suites: 1 passed, 1 total
tests:       1 passed, 1 total
snapshots:   1 added, 1 total
time:        8.198s
ran all test suites.

同时,在test文件夹下会输出一个文件,即为生成的快照。

// jest snapshot v1, https://goo.gl/fbaqlp

exports[`renders correctly 1`] = `
<view
 style={
  object {
   "backgroundcolor": "#ddd",
   "height": 100,
  }
 }
>
 <text
  accessible={true}
  allowfontscaling={true}
  disabled={false}
  ellipsizemode="tail"
  style={
   object {
    "fontsize": 30,
   }
  }
 >
  title
 </text>
 <text
  accessible={true}
  allowfontscaling={true}
  disabled={false}
  ellipsizemode="tail"
  style={
   object {
    "color": "red",
    "fontsize": 15,
   }
  }
 >
  text
 </text>
</view>
`;

修改源文件

在下一次运行测试的时候,呈现的输出将与之前创建的快照进行比较。快照应该和代码一起提交。当快照测试失败的时候,就需要检查是否有意或无意的更改。如果是和预期中的变化一样,调用jest -u来覆盖当前的快照。

我们来更改一下原来的代码:把第二行<text>的字号改为14.

<text style={{ fontsize: 14, color }}>{text}</text>

这时,我们再运行jest。这时终端将会抛出错误,并指出了错误位置

详解如何在项目中使用jest测试react native组件

因为这段代码是我们有意改的,这时运行jest -u,快照被覆盖。再执行jest则不会报错了~

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。