Привет, я пытаюсь протестировать экземпляр пользовательского класса, у меня есть несколько тестов в одном и том же файле спецификации, поэтому я использую метод 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']
}
}
});
};
Возможно ли, что инъекция сервисов заканчивается после их выполнения? Если я покажу, как я могу избежать этого поведения.
Вы не импортировали провайдеров в свой тестовый стенд:
beforeAll(() => {
TestBed.configureTestingModule({
providers: [...] // <---------- HERE
})
.compileComponents();
});
После этого сделайте проще: используйте тестовый стенд! Он содержит weekMap зависимостей:
const myServiceInstance = TestBed.get(MyService);
@ErnestoAlfonso, возможно, вам следует прочитать документация перед тестированием ...
Я имею в виду, что если вы даже не понимаете концепции, нет смысла тестировать ради тестирования.
TestBed.configureTestingModule создает модуль для тестирования, он работает как другие модули с импортом, провайдерами и т. д., если я импортирую модуль в TestingModule, он будет работать так же, как когда я делаю то же самое в одном из моих модулей приложения.
Вот о чем я говорю, вы вообще не знакомы с концепцией модульного тестирования. Потратьте некоторое время, прочитайте документацию, и вы поймете свои ошибки.
Я думаю, что начинаю понимать, что вы говорите, вы говорите, что модульный тест не может включать внешний элемент, а только элементы, необходимые элементу, который вы тестируете?
@ErnestoAlfonso вау, ты быстро читаешь! Действительно, модульные тесты касаются отдельных модулей. На самом деле я только что ответил на аналогичный вопрос о принципах модульного тестирования, если вам нужны основные концепции.
@ErnestoAlfonso хорошо документация, но пожалуйста!
у меня есть провайдеры в моем AppModule. Нужно импортировать с TestBed?