【澳门葡京】详解怎么着在类型中行使jest测试react,你需求领会的前端测试

你须求了然的前端测试“金字塔”

【澳门葡京】详解怎么着在类型中行使jest测试react,你需求领会的前端测试。2017/11/24 · JavaScript
· 测试

原文出处:
oschina   

澳门葡京 1

比方您正在测试前端应用程序,则应该了然前端测试金字塔。

在本文中,大家将见到前端测试金字塔是何等,以及怎么样行使它来创立周到的测试套件。

前者测试金字塔

前者测试金字塔是多少个前端测试套件应该怎样构建的结构化表示。

完美的测试套件由单元测试,一些快照测试和一些端到端(e2e)测试组成。
澳门葡京 2

这是测试金字塔的立异版本,特定于测试前端应用程序。

在那篇小说中,大家将见到各样测试项目标旗帜。
为此,大家将为示范应用程序成立二个测试套件。

应用

要详细询问前端测试金字塔,咱们来探视怎么着测试三个 Web 应用。

该利用是三个简短的 modal 应用。 点击2个按钮打开一个 modal ,点击 modal
上的 OK 按钮关闭 modal。

澳门葡京 3

咱俩将从基于组件的框架构建利用。
别担心细节,大家会维持那么些(详细)的级别。

该利用由多个零件组成 – 一个 Button 组件,二个 Modal 组件和三个 App
组件。

我们要写的第多少个测试是单元测试。
在前端测试金字塔中,大部分测试都是单元测试。

此时此刻Javascript的测试工具很多,然则本着React的测试策略,非死不可推出的ReactJs标配测试工具是Jest.Jest的官网地址:。大家得以看看Jest官网宣称的是:Painless
JavaScript
Testing。是非死不可用于测试服务和React应用程序的JavaScript单元测试框架。

详解怎么样在档次中使用jest测试react native组件,jestreact

日前Javascript的测试工具很多,不过本着React的测试策略,Facebook推出的ReactJs标配测试工具是Jest.Jest的官网地址:
JavaScript
Testing。是脸书用于测试服务和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。那时就安插达成了。

快照测试

写3个组件

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。那时终端将会抛出荒谬,并提议了错误地点

澳门葡京 4

因为那段代码是我们有意改的,那时运维jest
-u,快照被遮住。再实践jest则不会报错了~

上述就是本文的全体内容,希望对我们的就学抱有协助,也盼望大家多多协助帮客之家。

native组件,jestreact
近日Javascript的测试工具很多,但是针对React的测试策略,Facebook推出的ReactJs标配测试…

初稿地址:

单元测试

单元测试测试的是代码库的单元。

它们向来调用函数或单元,并有限支撑重返正确的结果。

在大家的施用中,大家的零件是单元。所以大家将为 Button 和 Modal
编写单元测试。没有需要为大家的采用组件编写测试,因为它没有其他逻辑。

单元测试会浅渲染组件,并断言当大家与它们互相时,它们的行事是合情合理的。

浅渲染意味着大家渲染组件一层深度。这样大家可以保证只测试组件,单元,而不是多少个级其他子组件。

在咱们的测试中,大家将触及组件上的操作,并检讨组件的作为是不是与预期一致。

我们不要瞅着代码。可是大家的零部件规格会如下所示:

  • 当 displayModal 为 true 时,Modal 有类是虎虎有生气的
  • 当 displayModal 为 false 时,Modal 没有类是活跃的
  • 当成功按钮被点击时,Modal 调用 toggleModal
  • 单击删除按钮时,Modal 会调用 toggleModal
  • 当 button 被点击时,button 调用 toggleModal

作者们的测试将浅渲染组件,然后检查每一项规格的劳作。

单元测试应该占据大家的测试套件的多边有以下多少个原因:

所谓单元测试相当于对每一种单元举行测试,通俗的将一般针对的是函数,类或单个组件,不涉及系统和购并。单元测试是软件测试的底子测试。Jest主要有以下特征:

用户在分裂的级别上与您的应用暴发互动。从按下按钮到将消息下载到他们的装置上,因而,你应有在迭代付出应用程序时测试种种用例和交互。

单元测试很快

几百个单元测试套件能在几分钟内运转。

这使得单元测试对开发很有用。
当重构代码时,我们可以变动代码,并在并未刹车组件的事态下运转单元测试来检查更改。
大家会在几分钟之内知道大家是还是不是破坏了代码,因为内部三个测试会败北。

  1. 适应性:Jest是模块化、可扩充和可安插的。
  2. 沙箱和赶快:Jest虚拟化了JavaScript的环境,能效仿浏览器,并且并行执行
  3. 快照测试:Jest可以对React
    树举行快照或其余连串化数值飞快编写测试,提供飞快更新的用户体验。
  4. 支撑异步代码测试:援助promises和async/await
  5. 自动生成静态分析结果:不仅浮现测试用例执行结果,也出示语句、分支、函数等覆盖率。

利用迭代支付工作流

当您的应用程序进行扩大时,你只怕会发现需求从服务器获取数据,与装备的传感器举行互动,可以还需求拜访当地存储,或显示复杂的用户界面。应用程序的七种性必要一个完善的测试策略。

在迭代开发二个新的性情时,首先需求编制三个新的测试,只怕在存活单元测试中添加新的测试例和断言。测试一上马是败退的,因为这一个新特征还尚未完毕。

在设计新成效时,考虑单元测试的布署性很主要。对于各种功用单元编写一个相应的单元测试。你的单元测试应该尽可多的带有到独具只怕与单元的交互,包含专业的相互、无效的输入、以及能源不可用的事态。

澳门葡京 5

图:测试驱动开发:八个周期与迭代进程。

总体的工作流,如上图,包涵一多元嵌套的循环迭代。其中长、慢、UI驱动的融会测试,你可以用更短、更快的单元测试驱动开发周期来形成。这一名目繁多循环一直频频到您的应用程序满意逐个用例截止。

单元测试是细颗粒的。

换句话说,他们是可怜实际的。

一经二个单元测试战败了,那么这些测试会告知我们它是什么以及为何失利的。

单元测试能很好地检讨大家的应用程序工作的底细。
它们是付出时最好的工具,尤其是一旦你依据测试驱动的开发。

不过它们无法测试一切。

为了保险大家突显正确的体裁,大家还索要动用快照测试。

为啥要使用单元测试工具

测试金字塔

澳门葡京 6

图:测试金字塔,显示相应在应用程序的测试套件中富含的三个测试项目。

测试金字塔,如上图所示,表明你的应用程序应该怎么包罗两种档次的测试:小测试、中测试和大测试。

  • 小测试是你可以在与生产连串隔离的情形下运转的单元测试。它们平常会mock全数重点组件,并在PC上神速运行。

  • 中测试是在于小测试和大测试期间的集成测试。它们集成了多少个零件,并在Android模拟器或诚实设备上运转。

  • 大测试是因此成就UI工作流来运维的合并和UI测试。它们确保重点的顶峰用户职责在Android模拟器或真实设备上平常干活。

注:那里测试金字塔的概念是谷歌针对Android应用的测试划分。不一致种类的应用,通过测试金字塔模型举行划层级的分开,以及每层的概念会有所不同。

即使小测试的速度迅猛,而且重点优异,可以让您快捷处理战败,但它们是低保真和独门的,让你很难相信经过测试的利用是可以健康运作的,所以要求通过大测试进行补足。

出于各样测试项目标两样风味,你的测试工作应当包涵测试金字塔的每一层测试。尽管每一种类其余测试比例可能因应用程序的行使情状而有所不一样,但大家司空见惯指出以下分类:7/10的小测试、五分一的中间测试和百分之十的大测试。

快照测试

快照测试是测试你的渲染组件的图纸,并将其与组件的以前的图形展开比较。

用 JavaScript
编写快照测试的最好方法是应用 Jest 。

Jest 不是雕塑渲染组件的图形,而是渲染组件标记的快照。 那使得 Jest
快照测试比古板快照测试快得多。

要在 Jest 中注册快照测试,必要加上如下代码:

const renderedMarkup = renderToString(ModalComponent)
expect(renderedMarkup).toMatchSnapshot()

1
2
const renderedMarkup = renderToString(ModalComponent)
expect(renderedMarkup).toMatchSnapshot()

若是你注册一个快照,Jest 将顾及其余的总体。
每一遍运转单元测试时,都会再也生成三个快照,并将其与之前的快照举办相比。

一旦代码改变,Jest 会抛出3个荒谬,并警告标志已经改成。
然后开发者可以手动检查并未类被误删的动静。

在上边的测试中,有人从<footer>中除去了 modal-card-foot 类。

澳门葡京 7

快照测试是一种检查组件样式或标志的方法。

假诺快照测试通过,我们精通代码更改不会潜移默化组件的体现。

一旦测试失利,那么我们驾驭确实影响了组件的渲染,并可以手动检查体制是或不是正确。

每一个组件至少应该一遍快照测试。
一个良好的快照测试展现组件的事态,以检讨它科学展现。

近年来我们曾经有了单元测试和快照测试,是时候看看端到端(e2e)测试。

大家在开发进度中,不采纳测试工具依旧得以团结写代码举行单元测试,不过大家的代码存在着互动调用关系,在测试进度中大家又希望使单元相对独立而又能健康运作,就必要大家对被测函数的依赖函数和条件举办mock,并且在测试数据输入、测试执行和测试结果检查方面存在很多相似性,测试工具正是为我们在那个地点提供了便利。

小测试

在加上和转移应用程序的作用时,通过创设和编辑单元测试来担保那几个效应依照预期的来运转。即使可以在Android模拟器或真实设备中运维单元测试,不过在付出环境中运营单元测试日常会更快、更易于,依据需求添加Stub或mock方法完成与Android系统开展交互。

端到端测试

端到端(e2e)测试是高层测试。

它们执行与我们手动测试应用程序时一样的操作。

在大家的应用程序中,大家有一个用户(操作)旅程。当用户点击按钮时,方式将开辟,当她们点击形式中的按钮时,形式将关门。

我们得以编制一个贯穿这一旅程的端到端测试。测试将打开浏览器,导航到网页,并通过种种操作来保障应用程序符合规律运营。

那几个测试将报告大家,我们的单元旦确地协同工作。它使大家莫大自信,该应用程序的要紧功能是可以符合规律办事的。

对 JavaScript 应用程序来说有两种办法可以编制端到端测试。像 test cafe
那样的先后会记录您在浏览器中进行操作并将其当做测试源回放。

还有类似 nightwatch 的档次,可让你用 JavaScript
编写测试项目。作者会推荐使用类似 nightwatch
的库。拿起来平昔用很简单,该测试运转速度比记录的测试更快。

相当于说,night1qtch
的测试如故相比较慢的。一套200个单元测试需求开销几分钟的日子,一套200个端到端测试仅要求几分钟时间来运维。

端到端测试的另八个题材是麻烦调试。当测试失利时,很难找出挫败的原因,因为测试涵盖了太多效益。

预备阶段

Robolectric

假若您的应用程序的测试环境须要单元测试与Android框架进行更广大的相互,那么您能够采用罗布olectric。此工具实施测试自个儿、基于Java
逻辑Stub来模拟Android框架,由社区来保证这几个Stub。

罗布olectric测试大概完全符合Android设备上运转测试的一心保真度,但仍比设备测试运转得更快。它还援助Android平台的以下多少个地点:

  • Android 4.1(API等级16)及更高版本
  • Android Gradle插件2.4及更高版本
  • 零件生命周期
  • 事件循环
  • 全部财富

罗布olectric有温馨的一套测试API,并引入了部分新定义。有关将Robolectric的API与应用程序的测试相结合的更加多信息,请参见该工具的
用户指南

结语

要得力地测试基于前端组件的 Web
应用程序,你须要二种档次的测试:单元测试,快照测试和 e2e 测试。

您应有对各样组件进行七个单元测试,对每一种组件举办一次或三遍快照测试,以及测试链接在同步的多少个零部件的两回或一次端到端测试。

完全单元测试将涵盖大部分测试,你将有一部分快照测试和一部分 e2e 测试。

假若你依照前端测试金字塔,你就足以应用刀客级测试套件创立可珍重的 Web
应用程序。

你可以在 GitHub 上看到应用程序的快照测试、单元测试和端到端测试的示范源码库。

1 赞 收藏
评论

澳门葡京 8

亟需七个rn项目,那里演示的是自己个人的门类ReactNative-ReduxSaga-TODO

Mock对象

您可以因而修改Android.jar版本来运行单元测试,从而来监督应用与之并行的Android框架元素。那几个JAPRADO文件不含有其余代码,所以您的应用程序调用Android框架暗中认同会抛出十二分。
要测试与Android系统彼此的代码成分,请使用像Mockito那样的框架来配置模拟目的。

安装jest

检测单元测试

你也得以在Andorid模拟器或诚实设备上运转检测单元测试,而不涉及其他stub或mock框架。因为这种测试方式的推行时间明显比地方单元测试慢,所以最好仅在必要评估应用程序对最近装备硬件的作为时才倚重此形式。

假诺您是用react-native
init命令行成立的rn项目,并且你的rn版本在0.38之上,则无需安装了。不太了然的话就看一下

中测试

在付出条件中测试了应用程序的各样单元之后,应辨证在模拟器或设施上运维时组件的一言一行是否正确。
中等测试允许你做到这一部分的支付进程。
假使有些应用程序的零件依赖于物理硬件,则那么些测试对于开创和运作特别主要。

中等测试你的应用程序如何协调七个单元,但它们不测试完整的应用程序。中等测试的用例包涵劳动测试、集成测试以及mock外部正视性行为的UI测试。

日常状态下,最还好Android模拟器或Firebase测试实验室等依据云服务上测试应用程序,而不是在真正设备上测试应用程序,因为您可以更自在,火速地测试各样显示器尺寸和硬件配置结合。

package.json文件中是或不是含有以下代码:

大测试

尽管测试应用程序中的每一层的功力是老大首要的,不过测试涉嫌整个堆栈的常见工作流和用例(从UI到工作逻辑到数据层)同样非同一般。

假如您的应用程序丰富小,则可能只需求一套大型测试来评估你的应用程序。
否则,你应当依照公司全体权,垂直功效或用户目的来划分你的特大型测试套件。

对此你所编写的每2个重型的依照工作流程的测试,你还应有编写中测试来检查工作流中包括的各样UI组件的效益。通过这种措施,即便在早先时代的多少个步骤中,相应的重型测试也会破产了,你的测试套件依旧可以在关键用户操作的每一步中三番五次识别潜在的题材。

AndroidJUnitRunner类定义了1个基于JUnit框架的测试运营器,它同意你在Android设备上运转JUnit
3或JUnit
4样式的测试类。便于将测试包和应用程序加载到实在设备或Android模拟器上,运转测试并告诉结果。

AndroidJUnitRunner类援救来自Android测试援救库的以下工具和框架:

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

JUnit4 Rules

测试阐明语言包含用于管理的重点应用程序组件的生命周期涉及你的测试代码,如Activitie
和Service。学习怎么定义那几个规则,看到
JUnit4平整指南

只要没有就设置一下npm i jest
–save-dev,并把上述代码添加到package.json文件的应和地方。

Espresso

Espresso同步异步职务,同时自动执行以下应用内相互:

在View对象上推行操作。

  • 完了跨越应用程序进度边界的办事流程。仅在Android
    8.0(API级别26)及更高版本上可用。
  • 评估具有扶持成效需要的用户如何采纳你的利用。
  • 搜索并激活RecyclerView和AdapterView对象中的项目。
  • 证实传出意图的景观。
  • 在WebView对象中验证DOM的社团。
  • 跟踪你的应用程序中长时间运作的后台操作。

要详细询问那么些互动以及如何在应用程序的测试中使用它们,请参阅
Espresso指南。

上述步骤达成后,简单运营npm run
test测试一下jest是不是布置成功。但大家尚无写测试用例,终端会打印no tests
found。那时就布署完毕了。

UI Automator

大家指出仅当您的应用程序必须与系统开展互动的操作时,才使用UI
Automator来测试你的应用程序。 由于UI
Automator与系统利用程序UI交互,因而你需求在历次系统创新后再也运转并修复UI
Automator测试。 此类更新包涵Android平台版本升级和GooglePlay服务的新本子。
作为利用UI
Automator的替代方案,大家提出添加封闭测试或将重型测试分为一名目繁多小型和中等测试。尤其是,一回强调于测试壹个应用程序间通讯,例如将新闻发送到其他应用程序,并对打算结果进行响应。Espresso-Intents工具得以协理您编写那一个较小的测试。

UI
Automator框架在你的应用程序的连串应用程序内推行交互,例如检查当前突显UI的层次结构、截取屏幕截图以及分析设备的此时此刻情景。有关UI
Automator如何检查正在测试的应用程序的越来越多详细新闻,请参阅 UI
Automator指南

快照测试

Android Test Orchestrator

Android Test
Orchestrator在其和好的Instrumentation沙箱中运作逐个UI测试,通过压缩测试时期的共享状态并在各种测试的根底上割裂应用程序崩溃来增强测试套件的可信赖性。

写3个零件

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的快照功用来与组件进行交互,并抓获显示的输出并创制2个快照文件。

// 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。那时终端将会抛出荒谬,并提出了错误地方

澳门葡京 9

因为那段代码是大家有意识改的,那时运维jest
-u,快照被遮盖。再履行jest则不会报错了~

上述就是本文的全部内容,希望对大家的就学抱有协理,也盼望大家多多支持脚本之家。

您大概感兴趣的篇章:

  • 浅谈React组件之性质优化
  • React Native
    图片查看组件的点子
  • React组件中的this的切进行使
  • React 组件转 Vue
    组件的命令写法
  • 浅谈React中的成分、组件、实例和节点
  • 拔取angular、react和vue落成平等的面试题组件
  • React组件refs的利用详解
  • 尝试本身出手用react来写八个分页组件(小结)
  • 浅谈react受控组件与非受控组件(小结)
  • 详解使用React进行零部件库开发
  • 浅谈React中组件间抽象
  • React 高阶组件入门介绍
  • 编制React组件项目推行分析

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website