Как внедрить сервисы в пользовательский класс в тесте beforeEach Karma / Jasmine в Angular 7? - PullRequest
0 голосов
/ 29 мая 2019

Привет, я пытаюсь протестировать создание экземпляра пользовательского класса, у меня есть несколько тестов в одном и том же файле спецификации, поэтому я использую метод beforeEach, также я использую метод inject, чтобы получить услуги, требуемые моим классом,но когда я запускаю тест, переменная appointmentCreationVehicle не определена, это мой код:

describe('AppointmentCreationVehicle', () => {
  let appointmentCreationVehicle: AppointmentCreationVehicle;

  beforeAll(() => {
    TestBed.configureTestingModule({
      imports: [AppModule]
    })
    .compileComponents();
  });

  beforeEach(
    inject([AppointmentCreationVehicle], (vehicleRestService: VehicleRestService) => {
      appointmentCreationVehicle = new AppointmentCreationVehicle(vehicleRestService);
    })
  );
  it('should create an instance',() => {
      expect(appointmentCreationVehicle).toBeTruthy();
  });

, тогда мой karma.conf.js выглядит так:

module.exports = function (config) {
    config.set({
        basePath: '',
        frameworks: ['jasmine', '@angular-devkit/build-angular'], 
        plugins: [
            require('karma-jasmine'),
            require('karma-firefox-launcher'),
            require('karma-mocha-reporter'),
            require('@angular-devkit/build-angular/plugins/karma')
        ],
        client: {
            clearContext: false, // leave Jasmine Spec Runner output visible in browser
            jasmine: {
                random: false
            },            
            captureConsole: true,
            mocha: {
                bail: true
            }        
        },
        reporters: ['mocha'],
        port: 9876,
        colors: true,
        logLevel: config.LOG_INFO,
        autoWatch: false,
        browsers: ['HeadlessFirefox'],
        singleRun: true,
        customLaunchers: {
            HeadlessFirefox: {
                base: 'Firefox',
                flags: ['-headless']
            },
            ChromeDebugging: {
                base: 'Chrome',
                flags: ['--remote-debugging-port=9876']
            }
        }
    });
};

Это возможночем заканчивается внедрение сервисов после его выполнения?Если я покажу, как я могу избежать этого поведения.

1 Ответ

1 голос
/ 29 мая 2019

Вы не импортировали поставщиков в свой испытательный стенд:

beforeAll(() => {
  TestBed.configureTestingModule({
    providers: [...] // <---------- HERE
  })
  .compileComponents();
});

После этого упростите: используйте испытательный стенд!Содержит недельную карту зависимостей:

const myServiceInstance = TestBed.get(MyService);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...