ava也提供了类似jest 的snapshot 测试,可以用来方便的测试web 组件,以下是一个简单的试用,
同时包含了自己碰到问题,以及解决方法,以及一些参考链接

使用typescript 以及tsx,测试react 组件

环境准备

  • 项目结构
 
  1. ├── package.json
  1. ├── src
  1. ├── app.ts
  1. ├── hello-component.tsx
  1. └── userlogin.tsx
  1. ├── tests
  1. ├── app.js
  1. ├── hello-component.js
  1. └── userlogin.js
  1. ├── tsconfig.json
  1. └── yarn.lock
  • 代码说明
    src 为typescript 代码,tests 为集成ava 测试
    package.json 包含ava 的一些配置,项目依赖,以及npm script
 
  1. {
  1. "name": "@rongfengliang/ava-test-learning",
  1. "version": "1.0.1",
  1. "main": "index.js",
  1. "license": "MIT",
  1. "devDependencies": {
  1. "@babel/polyfill": "^7.6.0",
  1. "@babel/preset-react": "^7.6.3",
  1. "@babel/register": "^7.6.2",
  1. "@types/react": "^16.9.11",
  1. "ava": "^2.4.0",
  1. "react": "^16.11.0",
  1. "react-test-renderer": "^16.11.0",
  1. "typescript": "^3.6.4",
  1. "zen-observable": "^0.8.14"
  1. },
  1. "ava": {
  1. "require": [
  1. "@babel/register",
  1. "@babel/polyfill"
  1. ]
  1. },
  1. "scripts": {
  1. "test:live": "ava -v -w",
  1. "test": "ava -v",
  1. "build:live": "tsc --watch"
  1. },
  1. "publishConfig": {
  1. "registry": "https://npm.pkg.github.com/"
  1. }
  1. }

tsconfig.json 文件定义

  1. {
  1. "compilerOptions": {
  1. "target": "es5",
  1. "module": "umd",
  1. "declaration": true,
  1. "outDir": "libs",
  1. "rootDir": "src",
  1. "jsx": "react",
  1. "removeComments": false,
  1. "strict": true,
  1. "moduleResolution": "node"
  1. }
  1. } 

src/app.js 可选 ,一个简单的module

  1. // define user entity
  1. let user = {
  1. /** user name */
  1. name:"dalong",
  1. /** user age */
  1. age:33
  1. }
  1. // for export default
  1. export default {
  1. user
  1. }
  1. export {
  1. user
  1. }
 

src/hello-component.tsx 一个测试组件

  1. import React = require("react");
  1. const HelloWorld = () => <h1>Hello World...!</h1>;
  1. export default HelloWorld;
 

src/userlogin.tsx 另外一个测试组件

  1. import React = require("react");
  1. /**
  1. * loginForm component
  1. */
  1. const LoginForm = ()=>
  1. <div>
  1. <h1>userename </h1>
  1. <input placeholder="please input your name" />
  1. <h1>pasword</h1>
  1. </div>
  1. export default LoginForm;

tests/hello-component.js snapshot 测试,userlogin.js 类似
babel 配置,为了简单使用6的格式,进行react 的处理,vue 也类似的

 
  1. {
  1. "presets": ["@babel/preset-react"]
  1. }

启动&&测试

  • 启动实时编译
  1. yarn build:live
  • 启动测试
  1. yarn test:live
  • 效果

修改组件,查看snapshot
src/hello-component.tsx

 
  1. import React = require("react");
  1. const HelloWorld = () => <h1>dalong World...!</h1>;
  1. export default HelloWorld;
 

几个问题

  • 新版本的变动
    新版本为了支持babel 7 ava 做了好多修改
    比如package.json 中关于ava 的配置以及依赖的preset
 
  1. "ava": {
  1. "require": [
  1. "@babel/register",
  1. "@babel/polyfill"
  1. ]
  1. }
  • regeneratorRuntime is not defined
    添加@babel/polyfill

说明

以上是一个简单的试用,还是得多看看github issue

参考资料

https://github.com/avajs/ava/issues/1640
https://github.com/avajs/ava/issues/1968
https://github.com/avajs/ava/issues/685
https://github.com/rongfengliang/ava-test-learning

ava 类似jest snapshot 功能试用的更多相关文章

  1. Jquery打造的类似新浪微博@提醒功能

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  2. python面向对象进阶 反射 单例模式 以及python实现类似java接口功能

    本篇将详细介绍Python 类的成员.成员修饰符.类的特殊成员. 类的成员 类的成员可以分为三大类:字段.方法和特性. 注:所有成员中,只有普通字段的内容保存对象中,即:根据此类创建了多少对象,在内存 ...

  3. HBase Snapshot功能介绍

    HBase在0.94之后提供了Snapshot功能,一个snapshot其实就是一组metadata信息的集合,它可以让管理员将表恢复到以前的一个状态.snapshot并不是一份拷贝,它只是一个文件名 ...

  4. ios实现类似魔兽小地图功能 在

    写了一个类似魔兽小地图功能的控件. 比如你有一个可以放大缩小的scrollView.会在里面进行一些放大缩小,点击里面的按钮呀,等操作. 这个小地图控件.就会和你的大scrollView同步.并有缩略 ...

  5. js/jQuery实现类似百度搜索功能

    一.页面代码:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www. ...

  6. pandas的筛选功能,跟excel的筛选功能类似,但是功能更强大。

    Select rows from a DataFrame based on values in a column -pandas 筛选 https://stackoverflow.com/questi ...

  7. vue 使用watch监听实现类似百度搜索功能

    watch监听方法,watch可以监听多个变量,具体使用方法看代码: HTML: <!doctype html> <html lang="en"> < ...

  8. 一个类似indexOf()的功能的函数

    之前面试的时候遇到了这样的一道题,不过写的时候有些细节没注意到,现在重新写了一下. 写一个类似indexOf()的功能的函数 var str = "dafdfgvdahjfbhyuyvtur ...

  9. AVD Snapshot功能

    写程序的时候,经常会碰到:The application has stopped unexpectly… 有时候,会想对原来软件增加新功能或者修改bug.在eclipse修改后保存代码(注意,要保存所 ...

随机推荐

  1. GoF的23种设计模式之结构型模式的特点和分类

    结构型模式描述如何将类或对象按某种布局组成更大的结构.它分为类结构型模式和对象结构型模式,前者采用继承机制来组织接口和类,后者釆用组合或聚合来组合对象. 由于组合关系或聚合关系比继承关系耦合度低,满足 ...

  2. 含有动态未知字段的 JSON 反序列化

    一般来说,正常的 json 长这个模样: { 'Name': 'Bad Boys', 'ReleaseDate': '1995-4-7T00:00:00', 'Genres': [ 'Action', ...

  3. jquery获取元素各种宽高及页面宽高

    如何使用jquery来获取网页里各种高度? 示例如下: $(document).ready(function(){  var divWidth = $("#div").width( ...

  4. Golang中文乱码问题

    在学习golang读取文件的过程中,遇到中文显示乱码的问题!golang没有自带的编解码包,因此需要借助第三方包 解决方法: 引入第三发转码包:git clone https://github.com ...

  5. Spark ML协同过滤推荐算法

    一.简介 协同过滤算法[Collaborative Filtering Recommendation]算法是最经典.最常用的推荐算法.该算法通过分析用户兴趣,在用户群中找到指定用户的相似用户,综合这些 ...

  6. 你与BAT只差这一套面试题

    1.Linux如何挂载windows下的共享目录?mount.cifs //IP地址/server /mnt/server -o user=administrator,password=123456l ...

  7. tensorflow提示:No module named ''tensorflow.python.eager".

        版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/qq_27921205/articl ...

  8. Docker搭建Adminer(数据库图形化管理界面)

    1.下载官方库的adminer镜像: docker pull adminer 2.创建adminer容器:docker run --link mysql:mysql --name adminer -p ...

  9. free - 显示系统内存信息

    free - Display amount of free and used memory in the system 显示系统中空闲和已使用内存的数量 格式: free [options] opti ...

  10. HTTP认识

    一.相关名词解释 1. 超文本:是指包含指向其他文档的超链接的文本 2. 万维网:简称web,是一个分布式的超媒体系统,它是超文本系统的扩充,以客户-服务器方式工作 3. 超媒体:文档包含文本,图片, ...