覆盖测试的依赖关系

TestBed提供了几个函数,允许我们覆盖测试模块中使用的依赖项。

  • overrideModule
  • overrideComponent
  • overrideDirective
  • overridePipe

例如,您可能想要覆盖组件的模板。这对于测试大型组件的一小部分很有用,因为您可以忽略DOM的其余部分的输出,并且只关注您感兴趣的部分。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import {Component} from '@angular/core';

@Component({
selector: 'display-message',
template: `
<div>
<div>
<h1>{{message}}</h1>
<div>
</div>
`
})
export class MessageComponent {
public message: string = '';

setMessage(newMessage: string) {
this.message = newMessage;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import {MessageComponent} from './message.component';
import { provide } from '@angular/core';
import {
async,
inject,
TestBed,
} from '@angular/core/testing';

describe('MessageComponent', () => {

let fixture;

beforeEach(() => {
TestBed.configureTestingModule({
declarations: [MessageComponent],
providers: []
});

fixture = TestBed.overrideComponent(MessageComponent, {
set: {
template: '<span>{{message}}</span>'
}})
.createComponent(MessageComponent);

fixture.detectChanges();
});

it('should set the message', async(inject([], () => {
fixture.componentInstance.setMessage('Test message');
fixture.detectChanges();
fixture.whenStable().then(() => {
const compiled = fixture.debugElement.nativeElement;
expect(compiled.querySelector('span').innerText).toEqual('Test message');
});
})));

});

View Example