Angular9 单元测试:是否可以进行 MOCK Parse.initialize 并且仍然有可靠的测试?



我想测试组件如何在我的Angular Service中使用Parse.initialize(appId,url(函数来做到这一点?
这是初始化部分:

Parse.initialize('MY_APP_ID', 'JS_KEY');
Parse.serverURL = 'https://parseapi.back4app.com/';

这是我的测试部分:

describe('StateComponent', () => {
let component: StateComponent;
let fixture: ComponentFixture<StateComponent>;
let service: TrayStateService;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [StateComponent],
providers: [
TrayStateService,
{ provide: NbDialogService, useValue: {} },
{ provide: NbToastrService, useValue: {} },
ChangeDetectorRef,
AuthSessionQuery,
{
provide: 'env',
useValue: environment
}
],
schemas: [CUSTOM_ELEMENTS_SCHEMA]
}).compileComponents();
service = TestBed.inject(TrayStateService);
}));
beforeEach(() => {
fixture = TestBed.createComponent(StateComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
it('should verify that immediate function works properly', fakeAsync(() => {
spyOn(service, 'getAll').and.returnValue(of(MockedDataResponseArray));
component.ngOnInit();
tick(10);
}));

这是我得到的错误:

错误:在使用 Parse 之前,需要调用 Parse.initialize。

您可以通过直接分配提供间谍。

let backup: any;
beforeEach(() => {
backup = Parse.initialize;
Parse.initialize = jasmine.createSpy();
});
afterEach(() => Parse.initialize = backup);
// ... your normal code
it('in a test', () => {
// ... your normal code
expect(Parse.initialize).toHaveBeenCalledWith('MY_APP_ID', 'JS_KEY');
expect(Parse.serverURL).toEqual('https://parseapi.back4app.com/');
});

最新更新