Во-первых, вы следите за contactService
, который после кода, который вы предоставляете, не определяется нигде. И вы должны определить свой contactSevice
перед выполняемой функцией compileComponents()
.
, чтобы вы делали что-то вроде этого.
TestBed.configureTestingModule({
declarations: [ ContactComponent ],
imports:[
FormsModule,
ReactiveFormsModule,
HttpClientModule, HttpClientTestingModule],
providers:[
...,
{
provide: ContactService,
useValue: class {
sendMail: () => of({//what ever object you want to return here});
}
}],
schemas: [NO_ERRORS_SCHEMA]
})
.compileComponents();
Но вышеприведенный подход делает ваш макет службы вызванная функция, и вы не можете на самом деле шпионить за ней. Если вам нужно шпионить за ней и делать все, что хотите, с помощью макетной службы. Вы можете реализовать такой макет:
class MockContactService {
sendMail() {
return of({});
}
}
let mockContactService;
beforeEach(()=> {
mockContactService = new MockContactService();
TestBed.configureTestingModule({
...,
providers:[
{
provide: ContactService,
useValue: mockContactService,
}],...
})
.compileComponents();
it('what ever', () => {
spyOn(mockContactService, 'sendMail');
})
})
Прежде всего, я предполагаю, что функция menu_conditions
, которую вы вызываете, на самом деле является функцией parent
, но я считаю, что вы должны это исправить.
Во-вторых, когда вы запускаете child()
в последней строке, он возвращает число или строку error
. Если вы хотите иметь возможность запустить child
внутри папки parent
, просто передайте его без скобок, например:
print(parent(child, ui))