一种解决方法是在测试之前修改测试组件中服务的属性,使其与外部函数中使用的属性相同。
例如,假设我们有一个组件'app.component”,其中包含一个名为'dataService”的服务。该服务有一个名为'data”的属性。我们想在一个名为'processData”的外部函数中引用该属性。我们可以在测试之前修改组件的属性以使其匹配,如下所示:
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { AppComponent } from './app.component';
import { DataService } from './data.service';
describe('AppComponent', () => {
let component: AppComponent;
let fixture: ComponentFixture;
let dataService: DataService;
beforeEach(async () => {
await TestBed.configureTestingModule({
declarations: [ AppComponent ],
providers: [ DataService ]
}).compileComponents();
});
beforeEach(() => {
fixture = TestBed.createComponent(AppComponent);
component = fixture.componentInstance;
dataService = TestBed.inject(DataService);
dataService.data = 'test data'; // 修改服务属性
fixture.detectChanges();
});
it('should process data', () => {
expect(processData()).toEqual('test data'); // 外部函数中引用服务属性
});
function processData() {
return dataService.data;
}
});
在上面的示例中,我们在'beforeEach”函数中修改了'dataService”的'data”属性,使其成为字符串'test data”。然后,在测试函数'should process data”中,我们调用了一个外部函数'processData”,该函数通过引用'dataService.data”的值来返回服务的属性值。由于我们在测试之前修改了组件中服务的属性,因此该测试应该通过。