文章目录

  • 测试没有依赖的组件类
    • 知识点:toBe、toMatch、更多matchers
  • 测试 @Input 和 @Output
  • 测试有依赖的组件类 TestBed

Angular测试组件的基础知识之一是 “测试组件类”。

测试没有依赖的组件类

测试没有依赖的组件类,需要遵循与没有依赖的服务相同的步骤:

  • 使用 new 关键字创建一个组件。
  • 调用它的 API。
  • 对其公开状态的期望值进行断言。
// 没有依赖的组件类
@Component({selector: 'lightswitch-comp',template: `<button (click)="clicked()">Click me!</button><span>{{message}}</span>`
})
export class LightswitchComponent {isOn = false;clicked() { this.isOn = !this.isOn; }get message() { return `The light is ${this.isOn ? 'On' : 'Off'}`; }
}
// 测试
describe('LightswitchComp', () => {it('#clicked() should toggle #isOn', () => {const comp = new LightswitchComponent();expect(comp.isOn).toBe(false, 'off at first');comp.clicked();expect(comp.isOn).toBe(true, 'on after click');comp.clicked();expect(comp.isOn).toBe(false, 'off after second click');});it('#clicked() should set #message to "is on"', () => {const comp = new LightswitchComponent();expect(comp.message).toMatch(/is off/i, 'off at first'); // 正则匹配 i:大小写不敏感。comp.clicked();expect(comp.message).toMatch(/is on/i, 'on after clicked');});
});

知识点:toBe、toMatch、更多matchers

toBe:期望实际值 === 期望值。
toMatch:期望实际值与正则表达式匹配。
更多matchers:https://jasmine.github.io/api/edge/matchers.html

测试 @Input 和 @Output

export class DashboardHeroComponent {@Input() hero!: Hero;@Output() selected = new EventEmitter<Hero>();click() { this.selected.emit(this.hero); }
}
// 测试
it('raises the selected event when clicked', () => {const comp = new DashboardHeroComponent();const hero: Hero = {id: 42, name: 'Test'};comp.hero = hero;// 订阅自定义事件selected发出的值comp.selected.pipe(first()).subscribe((selectedHero: Hero) => { // 验证有触发selected事件,验证emit出来的值expect(selectedHero).toBe(hero)});// 触发selected自定义事件发出值comp.click();
});

测试有依赖的组件类 TestBed

// 有依赖的组件类
export class WelcomeComponent implements OnInit {welcome = '';constructor(private userService: UserService) { }ngOnInit(): void {this.welcome = this.userService.isLoggedIn ?'Welcome, ' + this.userService.user.name : 'Please log in.';}
}class MockUserService {isLoggedIn = true;user = { name: 'Test User'};
}

当组件有依赖时,使用 TestBed 来同时创建[提供(provide)注入(inject)]该组件及其依赖。
TestBed:配置和初始化用于单元测试的环境,并提供用于在单元测试中创建组件和服务的方法。

// 在 TestBed 配置中【提供】并【注入】所有所需的组件和服务
beforeEach(() => {TestBed.configureTestingModule({// 提供(provide)组件和所依赖的服务providers: [WelcomeComponent,{ provide: UserService, useClass: MockUserService }]});// 注入(inject)组件和所依赖的服务comp = TestBed.inject(WelcomeComponent);userService = TestBed.inject(UserService);
});// 开始测试
it('should not have welcome message after construction', () => {expect(comp.welcome).toBe('');
});it('should welcome logged in user after Angular calls ngOnInit', () => {comp.ngOnInit(); // 别忘了要像 Angular 运行应用时一样调用生命周期钩子方法expect(comp.welcome).toContain(userService.user.name);
});it('should ask user to log in if not logged in after ngOnInit', () => {userService.isLoggedIn = false;comp.ngOnInit();expect(comp.welcome).not.toContain(userService.user.name);expect(comp.welcome).toContain('log in');
});

Angular 组件类测试相关推荐

  1. Angular 依赖的测试和 Fake

    原文:Testing and faking Angular dependencies 依赖注入是 Angular 的一个关键特性.这种灵活的方法使我们的可声明和基于类的服务更容易隔离测试. 可摇树依赖 ...

  2. pb怎么封装com组件_从零开始构建 Angular 组件库

    NG-ZORRO 组件库官网地址:Ant Design Of Angular Github地址:NG-ZORRO/ng-zorro-antd 更新:视频已上传 谢亚东演讲视频_腾讯视频​v.qq.co ...

  3. Angular 组件交互

    Angular 组件交互 组件交互: 组件通讯,让两个或多个组件之间共享信息. 使用场景: 当某个功能在多个组件中被使用到时,可以将该特定的功能封装在一个子组件中,在子组件中处理特定的任务或工作流. ...

  4. Angular组件--动态组件

    2019独角兽企业重金招聘Python工程师标准>>> 动态创建组件的应用场景很多,比如动态广告.像浏览器一样动态打开多个页面等等等等 要动态创建组件主要需要用到angular中的C ...

  5. 存根类 测试代码 java_测试双打:模拟,假人和存根

    存根类 测试代码 java 大多数班级都有合作者. 在进行单元测试时,您通常希望避免使用那些协作者的实际实现方式来避免测试的脆弱性和绑定/耦合,而应使用测试双打:模拟,存根和双打. 本文引用了有关该主 ...

  6. 怎样编写测试类测试分支_编写干净的测试–从配置开始

    怎样编写测试类测试分支 很难为干净的代码找到一个好的定义,因为我们每个人都有自己的单词clean的定义. 但是,有一个似乎是通用的定义: 简洁的代码易于阅读. 这可能会让您感到有些惊讶,但我认为该定义 ...

  7. 存根类 测试代码 java_嘲弄和存根–了解Mockito的测试双打

    存根类 测试代码 java 介绍 我遇到的一件事是使用模拟框架的团队假设他们在模拟. 他们并不知道Mocks只是Gerard Meszaros在xunitpatterns.com上分类的"测 ...

  8. camel eip_Apache Camel教程– EIP,路由,组件,测试和其他概念的简介

    camel eip 公司之间的数据交换增加了很多. 必须集成的应用程序数量也增加了. 这些接口使用不同的技术,协议和数据格式. 但是,这些应用程序的集成应以标准化的方式建模,有效实现并由自动测试支持. ...

  9. 怎样编写测试类测试分支_测试技巧–不编写测试

    怎样编写测试类测试分支 对此没有太多疑问,测试代码的方式是一个有争议的问题. 不同的测试技术由于各种原因(包括企业文化,经验和总体心理观点)而受到不同开发人员的青睐. 例如,您可能更喜欢编写经典的单元 ...

最新文章

  1. 黑马程序员:从零基础到精通的前端学习路线
  2. 1.3 Java二维数组详解
  3. 【企业管理】人力资源-华为实践
  4. json支持的最大长度_Swifter.Json 可能是 .Net 平台迄今为止性能最佳的 Json 序列化库【开源】...
  5. HDU3966(树链剖分)
  6. 安卓手机突然很卡_你的安卓手机越来越卡?教你4招轻松解决问题!
  7. jQuery DOM 节点操作
  8. java简单实现一个缓存_java简单实现缓存的三种方法
  9. 7z解压缩软件下载安装教程
  10. 美爆!《自然》公布2018年19张最震撼的科学图片
  11. 清华大学梁宸计算机系,2015年自主招生--五大联赛银牌争夺战
  12. 服务器为什么要域名解析,DNS解析的过程是什么 为什么需要DNS解析域名为IP地址?...
  13. Wallpaper Engine壁纸推荐,让程序猿的桌面优美起来
  14. 16个免费高质量无版权图片视频网站分享,可以商用!
  15. 【图像配准】SIFT图像配准【含Matlab源码 1007期】
  16. MongoDB 条件查询--比较操作
  17. Android 单个TextView 点击“显示全部”功能实现方法
  18. App开发中利用Mob实现免费短信验证码
  19. pd.DataFrame用法
  20. 电气CAD制图软件中如何进行开关连接?

热门文章

  1. 区别:二次型、标准形、规范形
  2. 医疗健康大数据: 应用实例与系统
  3. HDU1411求四面体体积
  4. 算法工程师月薪多少钱,算法工程师岗位需要学习哪些知识?
  5. 18天掌握Java SE jvav梳理总结 从jvav到架构师
  6. 辽宁移动数码S6_S805_RTL8188_线刷固件包
  7. vue 路由history模式打包部署 The requested URL * was not found on this server. 的解决方法
  8. 深度分析如何在Hadoop中控制Map的数量
  9. JAVA EE框架课程考点复习(大题和判断题)
  10. 在数据库中能不能像用excel那样直接填表保存进数据库,而不是用SQL语句