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

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

环境准备

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

tsconfig.json 文件定义

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

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

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

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

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

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

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

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

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

启动&&测试

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

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

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

几个问题

  • 新版本的变动
    新版本为了支持babel 7 ava 做了好多修改
    比如package.json 中关于ava 的配置以及依赖的preset
 
 "ava": {
    "require": [
      "@babel/register",
      "@babel/polyfill"
    ]
  }
  • 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. sqlalchemy 配合bootstrap-table实现后台分页

    创建公共的mysql连接函数 def db_session(): db_config='mysql+mysqldb://'+ mysqluser + ':' + mysqlpassword+'@'+m ...

  2. kubernetes支持local volume

    目录 local volume 创建一个storage class 静态创建PV 使用local volume PV 动态创建PV local volume kubernetes从1.10版本开始支持 ...

  3. mvc_第一章后入门_第一遍_控制器和视图

    在掌握了数据库访问方法之后,我们来看几个mvc的入门程序,借此熟悉mvc的常见工作方式. 一.创建项目,显示一个最简单的页面. 要点:1.为了突出重点,不使用模版:2.项目类型为mvc,便于获得vs添 ...

  4. tiny-spring 分析

    tiny-spring 分析 前言 在阅读 Spring 的源代码(依赖注入部分和面向切面编程部分)时遇到不少困惑,庞大的类文件结构.纷繁复杂的方法调用.波诡云谲的多态实现,让自己深陷其中.一头雾水. ...

  5. Python面向对象封装案例

    01. 封装 封装 是面向对象编程的一大特点 面向对象编程的 第一步 —— 将 属性 和 方法 封装 到一个抽象的 类 中 外界 使用 类 创建 对象,然后 让对象调用方法 对象方法的细节 都被 封装 ...

  6. MySQL导入数据报错Got a packet bigger than‘max_allowed_packet’bytes错误的解决方法

    由于max_allowed_packet的值设置过小的原因,只需要将max_allowed_packet值设置大一点就OK了.通过终端进入mysql控制台,输入如下命令可以查看max_allowed_ ...

  7. Appium的测试简单流程

    1.环境的搭建:jdk,SDK,appium,手机模拟器(夜神模拟器) 2.appium的运作流程图: 图中的流程步骤简单来说是: 1.测试脚本写入appium: 2.appium创建连接,将脚本利用 ...

  8. Idea中SpringBoot引入thymeleaf没有提示

    问题描述: 最近使用Idea搭建SpringBoot时,用到了 thymeleaf,但是出现了点问题:输入th: 代码有没有提示. 解决方法: <html lang="en" ...

  9. C++使用通配符查找文件(FindFirstFile)

    调用 FindFirstFile 和 FindNextFile 可搜索某个目录下的相应文件. BOOL SearchFilesByWildcard(WCHAR *wildcardPath) { HAN ...

  10. GeoGebra 代数输入的提示和技巧

    GeoGebra是Mac平台上一款自由且跨平台的动态数学软件,提供各级教育使用,包含了几何.代数.表格.图形.统计和微积分,集中在一个容易使用的软件.   确认表达式 始终按  Enter  键确认您 ...