angular组件间传值测试的方法详解
前言
我们知道angular组件间通讯有多种方法,其中最常用的一种方法就是借助于 @Input 和 @Output 进行通讯。具体如何通讯请参考,本文不再赘述,我们来讲讲关于此方法如何进行单元测试。
创建假组件
我们单元测试父组件与子组件的的交互是否符合我们的要求,我们在父组件进行测试,就需要模拟一个假的子组件出来,这样排除其他因素对测试的影响。
比如现在我在分页组件里写了一个每页大小选择组件,现在要测试一下组件间交互。现在分页组件就是我们的父组件,每页大小组件就是我们的子组件。我们现在需要去模拟一个假的子组件出来。我们先模拟一个假模块出来。
我们的子组件在core模块里,我们在core模块下创造一个core-testing模拟模块。再在core-testing模块下创造一个core组件,因为我们是一个模拟模块,我们只需要ts文件即可。
@Component({ selector: 'app-size', template: ` <p> size-select works! </p> `, styles: [] }) export class SizeComponent implements OnInit { constructor() { } ngOnInit() { } }
为了我们可以在父组件的测试文件中得到模拟的子组件,我们还需要一个controller,在core-testing文件夹下创建一个core-testing-controller.ts文件。CoreTestingController类继承TestingController。
export class CoreTestingController extends TestingController { }
在我们的core-testing.module里声明CoreTestingController为提供者
providers: [ CoreTestingController ]
此时我们的目录树
core-testing git:(134) ✗ tree
.
├── core-testing-controller.ts
├── core-testing.module.ts
├── page
│ └── page.ponent.ts
└── size
└── size.ponent.ts
因为我们是模拟的子组件,所以我们应该添加子组件的@Input 和 @Output,在构造函数里把这个模拟的子组件添加到CoreTestingController里。
export class SizeComponent implements OnInit { @Input() size: number; @Output() onChangeSize = new EventEmitter<number>(); constructor(private controller: CoreTestingController) { this.controller.addUnit(this); } }
此时我们的准备工作就完成了。
单元测试
我们引入假组件并声明提供者
import {CoreTestingController} from '../core-testing/core-testing-controller'; import {SizeComponent} from '../core-testing/size/size.ponent'; beforeEach(async(() => { TestBed.configureTestingModule({ declarations: [ PageComponent, SizeComponent ], imports: [FormsModule], providers: [ CoreTestingController ] }) .pileComponents(); }));
我你们这里引入的是我们创造的假的SizeComponent,因为我们父组件与子组件在同一个模块里,所以我们直接引入SizeComponent就可以。
此时我们父组件想要子组件时就会使用假的子组件。
我们先断言@Input,我们断言父组件的值与我们假的子组件值相等
it('选择每页大小', () => { const controller = TestBed.get(CoreTestingController) as CoreTestingController; const sizeComponent = controller.get(SizeComponent) as SizeComponent; expect(sizeComponent.size).toBe(ponent.size); });
我们这里的get方法就对应的我们之前的构造函数的addUnit方法,具体参考TestingController类定义的方法。
然后我们再断言子组件向父组件@Output也没有问题,我们先spyon父组件接收子组件值的方法,然后定义一个变量并传给父组件,然后断言父组件接收到的值与子组件传的值相同。
spyOn(ponent, 'onSizeSelected'); const emitSize = 4; sizeComponent.onChangeSize.emit(emitSize); expect(ponent.onSizeSelected).toHaveBeenCalledWith(4);
这时我们就达到了我们测试的目的。
我们启动测试,发现我们本来的选择下拉框变成了文字,这就是我们假的子组件的效果。
我们进行单元测试,就需要除被测组件外,其他引用组件尽量为假,才能达到我们的目的。
到此这篇关于angular组件间传值测试的文章就介绍到这了,更多相关angular组件间传值测试内容请搜索狼蚁SEO以前的文章或继续浏览狼蚁网站SEO优化的相关文章希望大家以后多多支持狼蚁SEO!
编程语言
- 如何快速学会编程 如何快速学会ug编程
- 免费学编程的app 推荐12个免费学编程的好网站
- 电脑怎么编程:电脑怎么编程网咯游戏菜单图标
- 如何写代码新手教学 如何写代码新手教学手机
- 基础编程入门教程视频 基础编程入门教程视频华
- 编程演示:编程演示浦丰投针过程
- 乐高编程加盟 乐高积木编程加盟
- 跟我学plc编程 plc编程自学入门视频教程
- ug编程成航林总 ug编程实战视频
- 孩子学编程的好处和坏处
- 初学者学编程该从哪里开始 新手学编程从哪里入
- 慢走丝编程 慢走丝编程难学吗
- 国内十强少儿编程机构 中国少儿编程机构十强有
- 成人计算机速成培训班 成人计算机速成培训班办
- 孩子学编程网上课程哪家好 儿童学编程比较好的
- 代码编程教学入门软件 代码编程教程