跳到主要内容
版本:26.x.

反应アプリアプリを

FacebookではJestを使用して,<一个HREF.=“https://reactjs.org/" target="_blank" rel="noopener noreferrer">反应アプリケーションをテストします。

セットアップ<一个班级=“hash-link" href="#セットアップ" title="#“>#

创建应用程序反应を使用したセットアップ<一个班级=“hash-link" href="#create-react-appを使用したセットアップ" title="#“>#

反应にに驯染みがない,<一个HREF.=“https://create-react-app.dev/" target="_blank" rel="noopener noreferrer">创建React App.の利用をお勧めします。すぐに使えて<一个HREF.=“https://create-react-app.dev/docs/running-tests/" target="_blank" rel="noopener noreferrer">Jestも同梱されています!スナップスナップショットをレンダリングレンダリングするに,反应测试渲染器を加加するだけです。

添加 --dev反应测试渲染器

创建React Appをを使わない<一个班级=“hash-link" href="#create-react-appを使わないセットアップ" title="#“>#

既存のアプリケーションがある场合は,いくつかのパッケージをインストールしてうまく机能するようにする必要があります。Babel-Jest.パッケージと反应のbabel预设をテスト环境内のコード変换するのに利用しています。<一个HREF.=“/ja/docs/getting-started">使用Babel.も参照して下载。

添加 --dev jest babel-jest babel-preset-env babel-preset-React Rest-Test-Renderer

package.json.は以下のようなものになっているはずです(<当前版本>はパッケージの実際の最新版のバージョンの数字になります)。脚本とJestの設定のエントリを追加して下さい:

// package.json.
“依赖性” {
“反应” “<当前版本>”
“反应 - DOM” “<当前版本>”
}
“devDependencies” {
“Babel / Preset-Env” “<当前版本>”
“Babel / Prepet-React” “<当前版本>”
“babel-jest” “<当前版本>”
“开玩笑” “<当前版本>”
“反应 - 测试渲染器” “<当前版本>”
}
“脚本” {
“测试” “开玩笑”
}
// babel.config.js.
模块 出口 = {
预设 [ “@babel / preset-env” “@babel / preset-react” ;
} ;

それでは次へ进み进みましょましょ!

スナップショットテスト<一个班级=“hash-link" href="#スナップショットテスト" title="#“>#

ハイハイパーリンクををレンダリングするするコンポーネント<一个HREF.=“/ja/docs/snapshot-testing">快照测试を作物成しう:

// link.reacect.js.
进口 反应 “反应” ;
const 状态 = {
徘徊 '徘徊'
普通的 '普通的'
} ;
出口 默认 班级 关联 延伸 反应 成分 {
构造函数 道具 {
超级 道具 ;
_onmouseEnter. = _onmouseEnter. 捆绑 ;
_onmouseleave. = _onmouseleave. 捆绑 ;
状态 = {
班级 状态 普通的
} ;
}
_onmouseEnter. {
setstate. { 班级 状态 徘徊 } ;
}
_onmouseleave. {
setstate. { 班级 状态 普通的 } ;
}
渲染 {
返回
< 一种
班级名称 = { 状态 班级 }
HREF. = { 道具 || '#' }
onMouseEnter = { _onmouseEnter. }
onmouseleave. = { _onmouseleave. }
>
{ 道具 孩子们 }
一种 >
;
}
}

コンポーネントとのやり取りとレンダリングされた出力をキャプチャしてスナップショットファイルを作成するために,反应のテストレンダラーとJestのスナップショット機能を利用しましょう:

// link.reacect.test.js.
进口 反应 “反应” ;
进口 渲染器 “react-test-renderer” ;
进口 关联 '../link.react' ;
测试 '链接在悬停时更改类' = > {
const 成分 = 渲染器 创建
< 关联 = http://www.facebook.com. > 脸谱网 关联 >
;
= 成分 toJSON ;
预计 tomatchsnapshot. ;
//手动触发回调
道具 onMouseEnter ;
//重新渲染
= 成分 toJSON ;
预计 tomatchsnapshot. ;
//手动触发回调
道具 onmouseleave. ;
//重新渲染
= 成分 toJSON ;
预计 tomatchsnapshot. ;
} ;

纱线测试または笑话を実行すると,このようなファイルがが出さますます:

// __tests __ / __快照__ / link.rehect.test.js.snap
出口 [ ` 链接在悬停1时更改类 ` ] = `
<一个
classname =“正常”
href =“http://www.facebook.com”
onMouseEnter ={[功能]}
onMouseLeave ={[功能]}>
脸谱网
` ;
出口 [ ` 链接在悬停2时更改类 ` ] = `
<一个
ClassName =“徘徊”
href =“http://www.facebook.com”
onMouseEnter ={[功能]}
onMouseLeave ={[功能]}>
脸谱网
` ;
出口 [ ` 链接在悬停3时更改类 ` ] = `
<一个
classname =“正常”
href =“http://www.facebook.com”
onMouseEnter ={[功能]}
onMouseLeave ={[功能]}>
脸谱网
` ;

次回のテストは,レンダリングされたた力は前にされたスナップと比较されます。快照应与代码更改一起提交。変更がを点検必要ますますありありありであれであれますであれであれありありありありありあります场场场场场场场场场ます场场场场场场场场を场场场场场场场场场场场场场场场场场场场场场场场场场场场点検场场场场场场场场场场场场场场场场场场场ljest - uコマンドでJestを実行して既存のスナップショットを上書きします。

この例のコードは<一个HREF.=“https://github.com/facebook/jest/tree/master/examples/snapshot" target="_blank" rel="noopener noreferrer">示例/快照から利用可能です。

モック,酶および致反应16を使使ししスナップショットテスト<一个班级=“hash-link" href="#モック、enzyme-および-react-16-を使用したスナップショットテスト" title="#“>#

酶と致反应16以降を使使ししいるいるいるいるますますますますますますますますます。

笑话 模拟 '../somedirectory/somecomponent' = > “SomeComponent” ;

コンソールに次のような警告が表示されます。

警告: < 单一的组分/ > 使用大写HTML。始终使用小写HTML标记 反应。
#または
警告:标签 < 单一组分 > 是无法识别的 这个浏览器。如果您的意思是渲染反应组件,请使用大写字母开始其名称。

React 16がこれらの警告を引き起こしは,要素のの型の方法

  1. テキストとしてレンダリングする。この方法を選んだ場合,スナップショット内のモックコンポーネントに渡された道具を確認することができませんが,シンプルで分かりやすい方法です。
    JS.
    笑话 模拟 './somecomponent' = 062. ; = 062. ; “SomeComponent” ;
  2. カスタム要素としてレンダリングする。DOM“カスタム要素”は一道チェックされない,警告も生长しん。
    tsx
    笑话 模拟 ”。/部件 = & # 062; = & # 062; < mock-widget /> ;
  3. 反应测试渲染器测试渲染器は,要素の型気気しので,单一组分といったといった要素を许容してくれくれくれくれくれtestを使うとtesttestショットをチェックしたりのふるまいとは独立したりコンポーネントのふるまいとは独立したりたりのふるまいとは独立としてのふるまいとは独立ととたりくれを使う
  4. 警告をすべて無効にします(jestの設定ファイルで行う必要があります):
    笑话 模拟 “fbjs / lib /警告” = > 要求 'fbjs / lib / liftfunction' ;
    警告をすべて无效ににし(jestの设定ファイルで行为必要必要ありますますう必要ありますますますこれ,例えばとるとるのためんんんにするにに,反应本地タグを,反应本地タグを,タグタグを,タグタグを,タグタグをににタグをに,多くの无关键词がが生物します。别の选択肢は,console.warningを利用して,特点の警告抑制抑制するです。

domのテスト<一个班级=“hash-link" href="#dom-のテスト" title="#“>#

レンダリングされたコンポーネントをアサートアサートし作品しのなら,<一个HREF.=“https://github.com/kentcdodds/react-testing-library" target="_blank" rel="noopener noreferrer">反应测试 - 库那<一个HREF.=“https://github.com/kentcdodds/react-testing-library" target="_blank" rel="noopener noreferrer">酶もしくはの反应<一个HREF.=“http://airbnb.io/enzyme/" target="_blank" rel="noopener noreferrer">TestUtilsが利用できます。以下の2つの例では,react-testing-libraryと酶を使用します。

反应测试 - 库<一个班级=“hash-link" href="#react-testing-library" title="#“>#

反应测试 - 图书馆を利用するは,YARN ADD - DEV @测试 - 库/反应を実行する必要があります。

2つのラベルを入れ替えるチェックを装配ししましょ。

// checkboxwithlabel.js.
进口 反应 “反应” ;
出口 默认 班级 checkboxwithlabel. 延伸 反应 成分 {
构造函数 道具 {
超级 道具 ;
状态 = { ischecked. 错误的 } ;
//手动绑定,因为反应类组件不会自动绑定
// https://reacontjs.oryabo入口g/blog/2015/01/27/reacont-v0.13.0-beta-1.html#autobinding.
onChange = onChange 捆绑 ;
}
onChange {
setstate. { ischecked. !! 状态 ischecked. } ;
}
渲染 {
返回
< 标签 >
< 输入
类型 = 复选框
检查 = { 状态 ischecked. }
onChange = { onChange }
/>
{ 状态 ischecked. 道具 labelOn 道具 Labeoff. }
标签 >
;
}
}
/ / __tests__ / CheckboxWithLabel-test.js
进口 反应 “反应” ;
进口 { 清理 fireEvent 渲染 } '@测试 - 库/反应' ;
进口 checkboxwithlabel. '../checkboxwithlabel' ;
//注意:在@测试库/ React @ 9.0.0或更高版本中自动为您自动完成清理后续
//卸载测试完成后卸载和清除DOM。
after 清理 ;
“checkboxwithlabel单击”后面更改文本 = > {
const { QueryBylabeltext. GetBylabeltext. } = 渲染
< checkboxwithlabel. labelOn = Labeoff. = 离开 />
;
预计 QueryBylabeltext. / 离开 / 一世 Tobeththy. ;
fireEvent 点击 GetBylabeltext. / 离开 / 一世 ;
预计 QueryBylabeltext. / / 一世 Tobeththy. ;
} ;

この例のコードは<一个HREF.=“https://github.com/facebook/jest/tree/master/examples/react-testing-library" target="_blank" rel="noopener noreferrer">例子/反应测试 - 库で入手できます。

酶<一个班级=“hash-link" href="#enzyme" title="#“>#

你必须跑纱线添加--dev酶使用酶。如果您使用的是15.5.0以下的React版本,还需要安装反应 - Addons-Test-Utils

React-Testing-Libraryのの代わり酶ををし上记テスト书籍直しましょう。このこの例でははうこの例でましょは<一个HREF.=“http://airbnb.io/enzyme/docs/api/shallow.html" target="_blank" rel="noopener noreferrer">浅渲染器を使用します。

/ / __tests__ / CheckboxWithLabel-test.js
进口 反应 “反应” ;
进口 { } '酶' ;
进口 checkboxwithlabel. '../checkboxwithlabel' ;
测试 “checkboxwithlabel单击”后面更改文本 = > {
//渲染文档中标签的复选框
const 复选框 = < checkboxwithlabel. labelOn = Labeoff. = 离开 /> ;
预计 复选框 文本 toequal. '离开' ;
复选框 找到 '输入' 模拟 '改变' ;
预计 复选框 文本 toequal. '上' ;
} ;

この例のコードは<一个HREF.=“https://github.com/facebook/jest/tree/master/examples/enzyme" target="_blank" rel="noopener noreferrer">实施例/酶から利用可能です。

独自のコード変换変换原理<一个班级=“hash-link" href="#独自のコード変換処理" title="#“>#

如果您需要更高级的功能,您也可以构建自己的转换器。而不是使用Babel-Jest.,这是一个使用的例子@babel /核心

//自定义 - 变换器.JS
'使用strict' ;
const { 变换 } = 要求 “@babel /核心” ;
const jestpreset. = 要求 'babel-preset-jest' ;
模块 出口 = {
过程 src 文件名 {
const 结果 = 变换 src {
文件名
预设 [ jestpreset. ]
} ;
返回 结果 || src ;
}
} ;

この例を动作させるに@babel /核心BABEL-PREMET-JESTパッケージパッケージをインストールするすることをないででで

これをjestと动作さににjest jestに次の设定追加する必要があります“变换”:{“\\。js $”:“path / to / custom-transformer.js”}

如果您想使用Babel支持构建变压器,您也可以使用Babel-Jest.要在自定义配置选项中撰写一个并传递:

const Babeljest. = 要求 “babel-jest” ;
模块 出口 = Babeljest. createTransformer {
预设 [ '我的定制预设' ]
} ;