单元测试场景实践:

1.数据交互

image.png

1.1测试分支需要覆盖全面

1.2借助函数生成符合类型的假数据

image.png

2.鼠标事件和键盘事件

2.1尽量采用端对端测试或者使用protractor库进行测试

2.2键盘事件test例子

image.png
image.png

需要劫持属性,给属性赋值
在新版的jasmine中可以使用spyOnProperty创建r间谍。


image.png

官方给的示例:


image.png

还有其他写法可以自己研究

2.3鼠标事件test例子

h1 = fixture.nativeElement.querySelector('h1');
fixture.nativeElement.querySelectorAll(selector);
 const paragraphDe = bannerDe.query(By.css('p'));
  const p: HTMLElement = paragraphDe.nativeElement;
  expect(p.textContent).toEqual('banner works!');
image.png

可能会遇到的坑:找不到元素,元素带有if或者需要一定条件才能渲染


image.png
image.png

triggerEventHandler和dispatchEvent有什么区别???
nativeElement和debugElement有什么区别???

3.父子组件

3.1父传子

父给子传了一个值 = 在组件中创建了一个变量;
这个值可能在模板上使用 => 同事件,找到元素,判断元素内容与传入值内容是否相等
也有可能没有在模板上使用 =>


image.png

3.2子传父

image.png

4.异步

Jasmine支持三种管理异步工作的方式:
async/ await


image.png

Promise


image.png

当然你也可以用async/await去测试promise,用promise去测试async/await


image.png

image.png

async关键字函数返回的不是promise,会自动用Promise.resolve()包装;
async关键字函数显式地返回promise,那就以你返回的promise为准;
await 在等什么?右侧表达式的结果
等到之后,对于await来说,分2个情况
不是promise对象
是promise对象
如果不是 promise , await会阻塞后面的代码,先执行async外面的同步代码,同步代码执行完,再回到async内部,把这个非promise的东西,作为 await表达式的结果
如果它等到的是一个 promise 对象,await 也会暂停async后面的代码,先执行async外面的同步代码,等着 Promise 对象 fulfilled,然后把 resolve 的参数作为 await 表达式的运算结果,走一遍微任务;

回调
按照一般思路测试:


image.png

使用done告诉jasmine,这有一个异步函数,需要等到done被调用才能结束测试
done() beforeAll,afterAll,beforeEach,afterEach,it有一个可选参数done,
done用于通知jasmine:这里有一个异步函数,必须等到done()被调用后才能结束当前测试步骤,执行下一步,默认情况下jasmine在每一步里最多等待5s,5s没有执行,用例被标记为失败;
可通过: jasmine.DEFAULT_TIMEOUT_INTERVAL = 2000;来修改全局的默认超时时间

image.png

done的其他例子:


image.png

虽然以上方法可以测试异步代码,但也确确实实让我们在单元测试中等待了3s,而单元测试需要尽可能快速运行,
jasmine为我们提供了一个jasmine的虚拟时钟,模拟timeout相关函数

image.png

Zone.js提供另外一种测试方法:
fakeAsync + ‘tick’
[tick()] 会模拟时光的流逝,直到所有未决的异步活动都结束为止
使用fakeAsync与tick搭配,用同步执行的程序模拟异步的效果 + tick模拟时间快转效果
因为一些异步是没有setTimeout的等待时间,tick中未加入任何参数(默认值为0)

image.png

image.png

fakeAsync + ‘tick’另外的使用例子
image.png

image.png

image.png

以上例子为但会结果success的例子,测试返回失败的例子原理一致,断言出现错误后会遇到的场景即可

http交互


image.png

timer和interval


image.png

image.png

6流

5.路由

测试路由组件
关心组件有没有根据给定的条件导航到正确的地址


image.png

验证routySpy.navigate调用信息


image.png

测试路由目标组件
没有按照官网给定的例子来,官网需要一个可复用的桩ActivatedRouteStub,
然后需要使用页面page对象
page对象没有生成成功;
使用了如下方法:


image.png

image.png

带有routerLink的组件


image.png

4.async(() => {})
5.(() => {})
为什么需要一个同步的环境和一个异步的环境
因为异步读取模板url和style的url

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,544评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,430评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,764评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,193评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,216评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,182评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,063评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,917评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,329评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,543评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,722评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,425评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,019评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,671评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,825评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,729评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,614评论 2 353

推荐阅读更多精彩内容

  • 单元测试概念 为什么要做单元测试 提供描述组件行为的文档 节省手动测试的时间 减少研发新特性时产生的 bug 改进...
    tobbyvic阅读 10,063评论 0 5
  • 此篇文章并非原创, 转载链接:https://www.jianshu.com/p/c54f0cc08c20 单元测...
    MissLu16阅读 947评论 0 4
  • 编写测试可不是一项迷人的工作;然而,由于测试可以避免使你的宝贝应用程序变成一块充斥错误的大垃圾场,所以编写测试又是...
    cosWriter阅读 1,581评论 0 4
  • 1. 单元测试入门——优秀基因 单元测试最初兴起于敏捷社区。1997年,设计模式四巨头之一Erich Gamma和...
    厲铆兄阅读 2,653评论 3 16
  • 什么是单元测试 在计算机编程中,单元测试(Unit Testing)又称为模块测试, 是针对程序模块(软件设计的最...
    HelloCsl阅读 10,953评论 1 46