ホームページ >ウェブフロントエンド >jsチュートリアル >Jest を使用して JavaScript アプリケーションをテストする方法

Jest を使用して JavaScript アプリケーションをテストする方法

php中世界最好的语言
php中世界最好的语言オリジナル
2017-11-27 11:55:032531ブラウズ

我们知道,Jest 是 FaceBook 用来测试 JavaScript 应用的一套测试框架,那么也包含了一些应用,它的优点其中就包括了对于React 的支持,也很容易支持其他框架,那么今天我们就教大家怎么用Jest测试JS应用

从最简单的开始,我们可以看看如何用 Jest 测试纯 JS 项目。

假设你需要测试 sum.js:

export default (a, b) => a + b

你只需要对应地新建一个 sum.test.js[1]:

import sum from './sum'
test('sum', () => {
  expect(sum(2, 3)).toBe(5)
})

关于这里的 `expect` 语法

然后在终端运行 jest 命令的时候就会自动找到这个文件,执行这里面的测试:

额,报错了,原来 Jest 默认只支持你所使用的 node.js 版本所支持的 JS 特性,例如 import export 就不支持,所以要么你的代码使用系统 node.js 兼容的语法写 (也就是使用 require),要么在这里使用 Babel 转义一下。

在 Jest 中使用 Babel 很简单,只需要安装 babel-jest 并新建一个 .babelrc 加入你想要的配置就行了,Jest 会自动使用 babel-jest。这里我们简单地使用 babel-preset-env 即可,对应的 .babelrc 是:

{
  "presets": ["env"]
}

然后重新运行 jest 测试便通过了:

jest 2

对于 React 应用,基本和纯 JS 项目类似,不过你需要在 .babelrc 中配置对 JSX 的支持,在大多数时候你的项目本身就已经在使用 .babelrc 了,所以这一步甚至也省略掉了。

资源文件

当你要测试的代码引用了非 JS 文件时,Jest 就不知道如何使用这些文件了,例如你的 Webpack 项目中的一个文件:

import './style.css'

正如你需要在 Webpack 中配置了 css-loader 一样,你也需告诉 Jest 如何处理 CSS 文件。

{
  "jest": {
    "transform": {
      "^.+\\.(js|jsx)$": "babel-jest",
      "^.+\\.css$": "<rootDir>/jest/css-transform.js"
    }
  }
}
关于 babel-jest
对应的 ./jest/css-transform.js
// 大多数测试并不关心 CSS 文件里的内容
// 所以这里我们直接返回一个空的对象
module.exports = {
  process() {
    return &#39;module.exports = {};&#39;
  },
  getCacheKey() {
    // The output is always the same.
    return &#39;css-cache&#39;
  }
}

类似地,你可以使用 transform 来设定如何处理其它类型的文件,比如 .vue[2] .svg 文件。

浏览器 API

假设你要测试的是一个 Web 应用,依赖于一些浏览器 API 比如 window document,它在 Jest 中同样可以正常运行,因为 Jest 默认使用了 js-dom 来模拟浏览器环境,不需要浏览器环境时可以通过使用命令行参数 --env node 或者配置文件来禁用。

Snapshot 测试

当你期望某个值不会改变的时候,可以使用 snapshot 测试。简单地说,它就是记录这个值的状态到本地自动生成的 snapshot 文件里,然后在下一次测试中用新的值来和其进行对比。这对 UI 之类的测试很有帮助:

import React from &#39;react&#39;
import Link from &#39;../Link.react&#39;
import renderer from &#39;react-test-renderer&#39;
it(&#39;renders correctly&#39;, () => {
  const tree = renderer
    .create(<Link page="http://www.facebook.com">Facebook</Link>)
    .toJSON()
  expect(tree).toMatchSnapshot()
})

这确保了 e4bb51f5d15e4fa5ed81077100691030Facebook06f735b502bd5273dad825215f7c405b 渲染出的内容不会出错。

当你更改了 52a25b17b52424c09a9e188108722f11 组件的逻辑,需要更新 snapshot 文件时,可以加上 --updateSnapshot 或者 -u 来更新。

类似的,Snapshot 测试不止于 UI 测试中,假设你写了个 Markdown 解析器,你可以用它来确保解析出的内容不会改变:

import renderMarkdown from &#39;./my-markdown-parser&#39;
test(&#39;render correctly&#39;, () => {
  const html = renderMarkdown(&#39;# markdown code&#39;)
  expect(html).toMatchSnapshot()
})

相信看了这些案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!


相关阅读:

怎么用CSS3做出灯光照射显示文字动画

css3点击显示涟漪特效

CSS3怎么制作蝴蝶飞舞的动画

以上がJest を使用して JavaScript アプリケーションをテストする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。