Angular2 имитирует инъекционный сервис

Я использую Angular 2 Karma-Jasmine. У меня есть Сервис,

it("test", () => {
    let x:any = function1('value', aService);
    expect(x).toEqual("value1");
});

Теперь AService использует метод getA(), а function1 использует метод getA(). Я хочу имитировать метод AService.getA?.

Подскажите, пожалуйста, как лучше всего издеваться над AService?


person emanuel07    schedule 04.10.2016    source источник
comment
Используете ли вы внедрение зависимостей в своем тесте? пожалуйста, приведите более крупный пример.   -  person Supamiu    schedule 04.10.2016
comment
У меня нет примера смерти @Supamiu, я хочу узнать, как лучше всего издеваться над angular2-jasmine-karma. Моя функция1 статическая, к которой передана служба AServcie, инъекции нет.   -  person emanuel07    schedule 04.10.2016


Ответы (1)


Если подпись function должна принимать тип AService

function1(value, service: AService) {}

затем вам нужно убедиться, что макет совместим с AService. Если AService имеет только один метод getA, вам действительно нужно сделать только

let mockA = {
  getA: () => {
    // mock implementation
  }
}

Если AService имеет больше методов, чем просто getA, и вы не хотите реализовывать это, вы можете "привести" макет к типу AService.

let mock = <AService>{ same as above }

Или если параметр function1 не типизирован как AService, то вы действительно можете передать что угодно.

См. также:

  • Это сообщение, в котором дается объяснение системы структурных типов TypeScript.
person Paul Samsotha    schedule 05.10.2016
comment
У моего AService есть и другие методы. Как поступить в таком случае? Пожалуйста, отредактируйте ответ для этого случая. - person emanuel07; 05.10.2016
comment
Спасибо, наверное, это лучшее решение для издевательств? - person emanuel07; 05.10.2016
comment
Я не знаю о лучшем решении, но я делаю это все время. - person Paul Samsotha; 05.10.2016
comment
Спасибо, и последний вопрос - мой getA() имеет возвращаемый тип, куда я должен его поместить? let mockA = ‹AService› { getA: () =› { // имитация реализации } } - person emanuel07; 05.10.2016
comment
getA: (): ReturnType => {}. Хотя большую часть времени TypeScript может понять это только по тому, что вы возвращаете в теле метода. - person Paul Samsotha; 05.10.2016