Насмешливый конструктор класса с жасмином, шуткой или ц-мокито - PullRequest
1 голос
/ 28 марта 2019

У меня есть группа классов, которые получают некоторые зависимости вне угла таким образом.

import {TypeATest} from '...../TypeA.model'
import { TypeBTest } from '..../TypeB.model'
import { SomeDependency } from './services/SomeDependency'
import { SomeAnother } from './services/SomeAnother'
  // ....

@Injectable({
  providedIn: 'root'
})
export class TestingService {
  this.activeTest: AnyTestType;

  constructor(private readonly injectorService: InjectorService) {}

  loadTest(TypeOfTest) {
    const someDependency = this.injectorService.get(SomeDependency)
    const someAnother = this.injectorService.get(SomeAnother)
      switch(TypeOfTest) {
        case TypeA:
            injector
            this.activeTest = new TypeATest(someDependency, someAnother);
            break;
        case TypeB:
            this.activeTest = new TypeBTest(someAnother);
            break;
      }
  }

  startTest(){
    this.activeTest.start()
  }

// .. more this.activeTest uses...
}

Я тестирую сервис, который загружает внешние классы, но я не хочу создавать TypeATest, TypeBTest или аналогичные, но просто высмеиваю результат (все они имеют одинаковый API), но я не могу найти как издеваться над ними. Есть ли способ сделать это?

1 Ответ

1 голос
/ 30 марта 2019

Эти два конструктора имеют именованные экспорты соответствующих модулей.

Можно смоделировать весь модуль, используя jest.mock с фабрикой модулей:

jest.mock('...../TypeA.model', () => {
  const start = jest.fn();
  const result = { start };
  return jest.fn(() => result);  
});

test('something', () => {
  // ...
});

... или смоделируйте только именованный экспорт модуля, используя jest.spyOn:

import * as TypeB from '..../TypeB.model';

test('something', () => {
  const spy = jest.spyOn(TypeB, 'TypeBTest');
  const start = jest.fn();
  spy.mockReturnValue({ start });
  // ...
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...