热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

React中编写的tsx组件,如何导入到js中进行单元测试?看了蚂蚁的源码,还是有点不太明白,进来一起研究下

现在很多项目中前端项目越来越庞大,单元测试是不能缺少的一环。我们工作中也不例外,React中现在大家用的比较多的有

现在很多项目中前端项目越来越庞大,单元测试是不能缺少的一环。我们工作中也不例外,React中现在大家用的比较多的有




1
jest

1
enzyme


经过一段时间的使用,现在也是拥抱TypeScript了,接口约定比原来的Javascript更加简洁清除了。但随之而来的问题也不少,通常我们编写TSX文件,引入React是用的默认方式:



1
2
3
4
5
//Regular imports

import * as React from 'react';



//Synthetic default imports:

import React from 'react';

按官方的说法第二种是动态导入,我们通常用断言的方式,也就是第一种引入React。看蚂蚁的源码是用的第二种方式引入的,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
"@types/react": "^15.0.38",

    "@types/react-dom": "~0.14.18",

    "antd-demo-jest": "^1.3.0",

    "antd-tools": "~1.6.0",

    "babel-cli": "^6.18.0",

    "babel-eslint": "^7.1.0",

    "babel-jest": "^19.0.0",

    "babel-plugin-import": "^1.0.0",

    "babel-plugin-transform-runtime": "^6.23.0",

    "babel-preset-es2015": "^6.18.0",

    "babel-preset-react": "^6.16.0",

    "babel-preset-stage-0": "^6.16.0",

    "bezier-easing": "^2.0.3",

    "bisheng": "^0.24.0",

    "bisheng-plugin-antd": "^0.15.0",

    "bisheng-plugin-description": "^0.1.1",

    "bisheng-plugin-react": "^0.5.0",

    "bisheng-plugin-toc": "^0.4.0",

    "color-standalone": "^0.11.6",

    "cross-env": "^4.0.0",

    "css-split-webpack-plugin": "^0.2.3",

    "dekko": "^0.2.0",

    "delegate": "^3.1.2",

    "dora-plugin-upload": "^0.3.1",

    "enquire.js": "^2.1.1",

    "enzyme": "^2.6.0",

    "enzyme-to-json": "^1.3.0",

    "eslint": "^3.0.1",

    "eslint-config-airbnb": "latest",

    "eslint-plugin-babel": "^4.0.0",

    "eslint-plugin-import": "^2.2.0",

    "eslint-plugin-jsx-a11y": "^5.0.1",

    "eslint-plugin-markdown": "~1.0.0-beta.4",

    "eslint-plugin-react": "^7.0.1",

    "eslint-tinker": "^0.4.0",

    "fetch-jsonp": "^1.0.3",

    "glob": "^7.1.1",

    "jest": "^20.0.4",

    "jsonml.js": "^0.1.0",

    "lint-staged": "^3.3.1",

    "mockdate": "^2.0.1",

    "moment-timezone": "^0.5.5",

    "pre-commit": "^1.2.2",

    "querystring": "^0.2.0",

    "rc-queue-anim": "^1.0.1",

    "rc-scroll-anim": "^1.0.3",

    "rc-tween-one": "^1.1.2",

    "react": "^15.0.0",

    "react-color": "^2.11.7",

    "react-copy-to-clipboard": "^4.0.1",

    "react-document-title": "^2.0.1",

    "react-dom": "^15.0.0",

    "react-github-button": "^0.1.1",

    "react-intl": "^2.0.1",

    "react-sublime-video": "^0.2.0",

    "react-test-renderer": "^15.5.4",

    "reqwest": "^2.0.5",

    "rimraf": "^2.5.4",

    "stylelint": "^7.8.0",

    "stylelint-config-standard": "^16.0.0",

    "typescript": "~2.3.0",

    "typescript-babel-jest": "^1.0.2",

    "values.js": "^1.0.3",

    "xhr2": "^0.1.3"

我想他们是通过

1
typescript-babel-jest

,

1
babel-jest

的方式可以这么直接导入的?在github上并没有找到过多关于这方式的解释,谁搞过这个吗?我准备翻翻babel看看怎么搞~~~

第二个问题是,tsx编写的组件,是如何支持导入test.js中进行单元测试的?

  1. tsx 导入js文件的时候js,编译阶段没有报错,同样是直接的import进去的




    );

    const colNode = TestUtils.findRenderedDOMComponentWithTag(col, 'DIV');

    expect(colNode.className).toBe('ant-col-2');

  });

  it('should render Row', () => {

    const row = TestUtils.renderIntoDocument(

     

    );

    const rowNode = TestUtils.findRenderedDOMComponentWithTag(row, 'DIV');

    expect(rowNode.className).toBe('ant-row');

  });

});
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//index.test.js

import React from 'react';

import TestUtils from 'react-dom/test-utils';

import { Col, Row } from '..'; //看过antd源码的会知道,这两个是tsx编写的组件



describe('Grid', () => {

  it('should render Col', () => {

    const col = TestUtils.renderIntoDocument(

     

2、第二个他们要解决的问题就是tsx转换为js,进行单元测试吧、他们是如何转换的呢?


   



推荐阅读
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
  • 本文介绍了如何使用JSONObiect和Gson相关方法实现json数据与kotlin对象的相互转换。首先解释了JSON的概念和数据格式,然后详细介绍了相关API,包括JSONObject和Gson的使用方法。接着讲解了如何将json格式的字符串转换为kotlin对象或List,以及如何将kotlin对象转换为json字符串。最后提到了使用Map封装json对象的特殊情况。文章还对JSON和XML进行了比较,指出了JSON的优势和缺点。 ... [详细]
  • Android实战——jsoup实现网络爬虫,糗事百科项目的起步
    本文介绍了Android实战中使用jsoup实现网络爬虫的方法,以糗事百科项目为例。对于初学者来说,数据源的缺乏是做项目的最大烦恼之一。本文讲述了如何使用网络爬虫获取数据,并以糗事百科作为练手项目。同时,提到了使用jsoup需要结合前端基础知识,以及如果学过JS的话可以更轻松地使用该框架。 ... [详细]
  • Hibernate延迟加载深入分析-集合属性的延迟加载策略
    本文深入分析了Hibernate延迟加载的机制,特别是集合属性的延迟加载策略。通过延迟加载,可以降低系统的内存开销,提高Hibernate的运行性能。对于集合属性,推荐使用延迟加载策略,即在系统需要使用集合属性时才从数据库装载关联的数据,避免一次加载所有集合属性导致性能下降。 ... [详细]
  • VSCode快速查看函数定义和代码追踪方法详解
    本文详细介绍了在VSCode中快速查看函数定义和代码追踪的方法,包括跳转到定义位置的三种方式和返回跳转前的位置的快捷键。同时,还介绍了代码追踪插件的使用以及对符号跳转的不足之处。文章指出,直接跳转到定义和实现的位置对于程序员来说非常重要,但需要语言本身的支持。以TypeScript为例,按下F12即可跳转到函数的定义处。 ... [详细]
  • 本文介绍了JavaScript进化到TypeScript的历史和背景,解释了TypeScript相对于JavaScript的优势和特点。作者分享了自己对TypeScript的观察和认识,并提到了在项目开发中使用TypeScript的好处。最后,作者表示对TypeScript进行尝试和探索的态度。 ... [详细]
  • 本文整理了Java中org.gwtbootstrap3.client.ui.Icon.addDomHandler()方法的一些代码示例,展示了Icon.ad ... [详细]
  • 用ESP32与Python实现物联网(IoT)火焰检测报警系统
    下图是本案例除硬件连线外的3步导学开发过程,每个步骤中实现的功能请参考图中的说明。在硬件连线完成之后我们建议您先使用“一分钟上云体验”功能预先体验本案例的实际运行效果 ... [详细]
  • 原文转自:http:blog.csdn.netchinasoftosgarticledetails7903045UploadAction.java:packagecr ... [详细]
  • JavaScript和Python是用于构建各种应用程序的两种有影响力的编程语言。尽管JavaScript多年来一直是占主导地位的编程语言,但Python的迅猛发展有 ... [详细]
  • Java导入Excel文件返回数据对应属性类字段,Java导出Excel文件如何让数据对应指定的标题字段
    Java导入Excel文件如何对应属性类对应的字段?Java导出Excel文件如何实现?下面分为两段供各位测试,要是不懂或者实在不行可以评论一下,看到我会回复的jar这些你们可以自 ... [详细]
  • #ReactivityFundamentals#DeclaringReactiveState ... [详细]
author-avatar
KING逊咖
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有