gpt4 book ai didi

Angular 2 Jasmine 如何测试组件的功能

转载 作者:太空狗 更新时间:2023-10-29 17:22:58 25 4
gpt4 key购买 nike

如何在 Angular 2 中模拟函数的点击事件?对于我的主页组件,我有:

主页组件

import { Component } from '@angular/core';
import { Router } from '@angular/router';

@Component({
moduleId: module.id,
templateUrl: 'home.component.html',
styleUrls: ['home.component.css'],
selector: 'home',
})
export class HomeComponent {

constructor(private router: Router) {

}

redirectToUpload() {
this.router.navigate(['/upload']);
}
redirectToAbout() {
this.router.navigate(['/about']);
}

}

主页组件规范

import { ComponentFixture, TestBed, async } from '@angular/core/testing';
import { HomeComponent } from './home.component';
import { DebugElement } from '@angular/core';
import { By } from '@angular/platform-browser';
import { Router } from '@angular/router';
import { HomeModule } from './home.module';
import { RouterLinkStubDirective, RouterOutletStubComponent } from '../../../test/router-stubs';
import { RouterModule } from '@angular/router';


export function main() {

let de: DebugElement;
let comp: HomeComponent;
let fixture: ComponentFixture<HomeComponent>;
let mockRouter:any;
class MockRouter {
//noinspection TypeScriptUnresolvedFunction
navigate = jasmine.createSpy('navigate');
}



describe('Home component', () => {

// preparing module for testing
beforeEach(async(() => {
mockRouter = new MockRouter();
TestBed.configureTestingModule({
imports: [HomeModule],

}).overrideModule(HomeModule, {
remove: {
imports: [ RouterModule ],

},
add: {
declarations: [ RouterLinkStubDirective, RouterOutletStubComponent ],
providers: [ { provide: Router, useValue: mockRouter }],
}
}).compileComponents().then(() => {

fixture = TestBed.createComponent(HomeComponent);
comp = fixture.componentInstance;


});
}));
tests();
});

function tests() {


beforeEach(() => {
// trigger initial data binding
fixture.detectChanges();



de = fixture.debugElement.query(By.css('h1'));

});

it('can instantiate Home', () => {
expect(comp).not.toBeNull();
});


it('should have expected <h1> text', () => {
fixture.detectChanges();
const h1 = de.nativeElement;
expect(h1.innerText).toMatch("Home");
});


}

}

我想测试 redirectToUpload() 和 redirectToAbout()。我将如何模拟点击并确保重定向是针对指定链接的?

最佳答案

首先,我建议您使用 Typescript 编写测试,它可以保持组件和测试之间的一致性。

以下是规范文件中的基本步骤:

获取元素(我建议尽可能使用 Id 标签)

const element = fixture.debugElement.query(By.css("#your-element"));

触发事件。 注意:元素上必须有一个(click)事件

element.triggerEventHandler("click", null);

然后从事件中检测变化

fixture.detectChanges();

在您的 HTML 模板中,您需要将点击事件指向您希望测试的函数 (click)="redirectToUpload()"

关于Angular 2 Jasmine 如何测试组件的功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40915547/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com