Angular单元测试编写的技巧有哪些

发布时间:2022-08-12 09:59:43 作者:iii
来源:亿速云 阅读:96

这篇“Angular单元测试编写的技巧有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Angular单元测试编写的技巧有哪些”文章吧。

Angular单元测试编写的技巧有哪些

测试思路:

单元测试

其中component,默认是Angular使用以下语法创建的待测试对象的instance

beforeEach(() => { 
  fixture = TestBed.createComponent(BannerComponent); 
  component = fixture.componentInstance; 
  fixture.detectChanges(); 
});

函数测试

1.函数调用,且没有返回值

function test(index:number ,fn:Function){
 if(fn){
     fn(index);
 }
}

请问如何测试?

反例: 直接测试返回值undefined

  const res = component.test(1,() => {}));
  expect(res).tobeUndefined();

推荐做法:

 # 利用Jasmine
 it('should get correct data when call test',() =>{
     const param = {
       fn:() => {}
    }
   spyOn(param,'fn')
   component.test(1,param.fn);
   expect(param.fn).toHaveBeenCalled();
 })

结构指令HostListener测试

结构指令,常用语隐藏、显示、for循环展示这类功能

 # code
 @Directive({ selector: '[ImageURlError]' })
export class ImageUrlErrorDirective implements OnChanges {
  constructor(private el: ElementRef) {}
  
  @HostListener('error')
  public error() { 
      this.el.nativeElement.style.display = 'none';
  } 
}

如何测试?

测试思路:

#1.添加一个自定义组件, 并添加上自定义指令
@Component({
  template: `<div>
    <image src="https://xxx.ss.png" ImageURlError></image>
  </div>`
})
class TestHostComponent {

}

#2.把自定义组件视图实例化,并派发errorEvent
beforeEach(waitForAsync(() => {
    TestBed.configureTestingModule({
        declarations: [
            TestHostComponent,
            ImageURlError
        ]
    });
}));

beforeEach(() => { 
 fixture = TestBed.createComponent(TestHostComponent); 
 component = fixture.componentInstance; 
 fixture.detectChanges();
});
  
it('should allow numbers only', () => {
    const event = new ErrorEvent('error', {} as any);
    const image = fixture.debugElement.query(By.directive(ImageURlError));
    image.nativeElement.dispatchEvent(event); //派发事件即可,此时error()方法就会被执行到
});

善用 public,private,protected 修饰符

angular中public修饰的,spec.ts是可以访问到;但是 private,protected修饰的,则不可以;

敲黑板

测试click 事件

click事件的触发,有直接js调用click,也有模仿鼠标触发click事件。

# xx.component.ts
@Component({
 selecotr: 'dashboard-hero-list'
})
class DashBoardHeroComponent {
    public cards = [{
        click: () => {
            .....
        }
    }]
}
# html
<dashboard-hero-list [cards]="cards"  class="card">
</dashboard-hero-list>`

如何测试?

测试思路:

it('should get correct data when call click',() => {
    const cards = component.cards;
    cards?.forEach(card => {
        if(card.click){
            card.click(new Event('click'));
        }
    });
    expect(cards?.length).toBe(1);
});

其余 click 参考思路:

思路一:

思路二:

以上就是关于“Angular单元测试编写的技巧有哪些”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注亿速云行业资讯频道。

推荐阅读:
  1. 编写JavaScript代码的小技巧有哪些
  2. java程序员如何编写更好的单元测试的7个技巧

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

angular

上一篇:Rust中的Struct如何使用

下一篇:css3如何设置字体翻转

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》