博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
React 16 Jest ES6级模拟 - 深入:了解模拟构造函数
阅读量:6700 次
发布时间:2019-06-25

本文共 1714 字,大约阅读时间需要 5 分钟。

转载地址

项目初始化

git clone https:// cd webpack4-react16-reactrouter-demogit fetch origingit checkout v_1.0.32npm install

ES6 Class Mocks(使用ES6语法类的模拟)

Jest可用于模拟导入到要测试的文件中的ES6语法的类。

ES6语法的类是具有一些语法糖的构造函数。因此,ES6语法的类的任何模拟都必须是函数或实际的ES6语法的类(这也是另一个函数)。

所以可以使用模拟函数来模拟它们。如下

深入:了解模拟构造函数

使用jest.fn().mockImplementation()构建的构造函数mock,使模拟看起来比实际更复杂。

那么jest是如何创建一个简单的模拟(simple mocks)并演示下mocking是如何起作用的

手动模拟另一个ES6语法的类

如果使用与__mocks__文件夹中的模拟类相同的文件名定义ES6语法的类,则它将用作模拟。

这个类将用于代替真正的类。
我们可以为这个类注入测试实现,但不提供监视调用的方法。如下
src/__mocks__/sound-player.js

export default class SoundPlayer {  constructor() {    console.log('Mock SoundPlayer: constructor was called');    this.name = 'Player1';    this.fileName = '';  }  choicePlaySoundFile(fileName) {    console.log('Mock SoundPlayer: choicePlaySoundFile was called');    this.fileName = fileName;  }  playSoundFile() {    console.log('Mock SoundPlayer: playSoundFile was called');    console.log('播放的文件是:', this.fileName);  }}

使用模块工厂参数的简单模拟(Simple mock using module factory parameter)

传递给jest.mock(path,moduleFactory)的模块工厂函数可以是返回函数*的高阶函数(HOF)。

这将允许在模拟上调用new。
同样,这允许为测试注入不同的行为,但不提供监视调用的方法

*模块工厂功能必须返回一个功能(* Module factory function must return a function)

为了模拟构造函数,模块工厂必须返回构造函数。

换句话说,模块工厂必须是返回函数的函数 - 高阶函数(HOF)。如下演示

jest.mock('../lib/sound-player', () => {  return function() {    return {      playSoundFile: () => {}    };  };});

注意:箭头功能不起作用(Note: Arrow functions won't work)

请注意,mock不能是箭头函数,因为在JavaScript中不允许在箭头函数上调用new。

所以这不起作用:

jest.mock('./sound-player', () => {  return () => {    // 不起作用 箭头函数不会被调用    return {playSoundFile: () => {}};  };});

这将抛出TypeError:_soundPlayer2.default不是构造函数,除非代码被转换为ES5,例如,

通过babel-preset-env。(ES5没有箭头函数也没有类,因此两者都将被转换为普通函数。)

实践项目地址

git clone https://git checkout v_1.0.32
你可能感兴趣的文章
Android Studio更新升级方法
查看>>
virtualbox主机与虚拟机互访,虚拟机上网
查看>>
ios相关手册、图表等综合
查看>>
SharpZipLib 文件/文件夹压缩
查看>>
百分比定位加position定位的常用布局
查看>>
SDK更新太慢
查看>>
2014年5月份
查看>>
Codeforces Round #257 (Div. 2/A)/Codeforces450A_Jzzhu and Children
查看>>
android 拍照注意问题
查看>>
form中的button按钮在IE11中自动提交表单问题导致弹出框关闭之后表单被重置
查看>>
在多个游戏视图间切换环境准备
查看>>
Linux命令-权限管理命令:chown
查看>>
【转】【MMX】 基于MMX指令集的程序设计简介
查看>>
Atitit 《摩奴法典》overivew 读后感 不是由国王 颁布的,而是 僧侣编制
查看>>
第三方推送-使用推
查看>>
Hadoop 2.2.0 HA构造
查看>>
WIN8系统中 任务管理器 性能栏 显示CPU利用率(已暂停)怎么回事?
查看>>
java如何将毫秒数转为相应的年月日格式
查看>>
whu oj 1551 Pairs (莫队算法)
查看>>
BZOJ3424 : Poi2013 Multidrink
查看>>