В модульном тесте я звоню форсунку и шпионит на объекте HTTP, как это ...Угловой 2 инжектор каждый раз дает вам «новую» инстанцию?
beforeEach(async(inject([MyRepository, MockBackend, Http],(myRepository: MyRepository, backend: MockBackend, http : Http) => {
spyOn(http,'get').and.callThrough();
backend.connections.subscribe((conn: MockConnection) => {
const options: ResponseOptions = new ResponseOptions({body: '[{"name":"chris"},{"name":"dave"}]'});
conn.mockRespond(new Response(options));
});
TestBed.compileComponents();
fixture = TestBed.createComponent(MyComponent);
fixture.detectChanges();
})));
Но когда я реорганизовать spyOn
несильно в вспомогательный метод, как это ...
class myTestHelper{
public static spyOnHttp(): void{
inject([Http],(http : Http) => {
spyOn(http, 'get').and.callThrough();
});
}
}
А затем вызвать мой новый код из моей тестовой установки (вместо spyOn непосредственно) я получаю следующее сообщение об ошибке ...
Error: <toHaveBeenCalledWith> : Expected a spy, but got Function.
Это похоже на использование новой функции ввода, возвращающей другой объект http. Но я думал, что они будут такими же? Если они не так, как угловые знают, какой из них использовать, если новый создается каждый раз, когда используется инжектор?
Таким образом, в этом случае, конечно, я бы иметь доступ к тем же аргумент «http», независимо от того, где я его называю, поскольку я только настраиваю один компонент в своем тесте? – Exitos
Если вы повторно используете один и тот же экземпляр компонента и предоставляете только «Http» в этом компоненте, вы должны получить тот же экземпляр. Тем не менее, «Http» является апатридом, и я не знаю, что вы имеете в виду с «иметь доступ к тому же« http »аргументу.« TestBed.createComponent (MyComponent) »создает новый экземпляр компонента для каждого теста, поэтому каждый тест получает другой экземпляр Http. –