Моя эпопея с Jest продолжается, нужен совет знающего. В чем суть - вся js
часть проекта имеет следующий путь относительно package.json
=> app/assets/javascript/
, тест и тестируемый компонент лежат тут => app/assets/javascript/app/pricing/
, в тестируемый pricing.component
импортируется pricing.service
из этой же директории, а в сервис импортируется api.service
с адресом app/assets/javascript/app/shared/
и вот на него то Jest
и ругается, точнее он ругается на сам путь в импорте import { ApiService, QueryFn } from 'app/shared';
.
При этом, если убрать api.service
из импортов, то тесты запускаются без проблем. Сам Jest
в терминале пишет какие то не совсем понятные пути с этому сервису, а предложенные решения в интернете не слишком помогли.
Собственно ошибка:
pricing.component
import { Component, OnInit } from '@angular/core';
import { PricingService } from './pricing.service';
@Component({
selector: 'app-pricing',
templateUrl: './pricing.tpl.pug',
providers: [PricingService]
})
export class PricingComponent implements OnInit {
constructor(private pricingService: PricingService) { }
ngOnInit() {
this.pricingService.load().subscribe(i => console.warn(i))
}
}
pricing.service
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs/Observable';
import { ApiService, QueryFn } from 'app/shared';
@Injectable()
export class PricingService {
private query: QueryFn;
constructor(private api: ApiService) {
this.query = this.api.query(`/api/v2/currencies`);
}
load(): Observable<any> {
return this.query();
}
}
pricing.spec
import { TestBed, ComponentFixture, async } from '@angular/core/testing';
import { PricingComponent } from './pricing.component';
import { PricingService } from './pricing.service';
describe('PricingComponent', () => {
let component: PricingComponent;
let fixture: ComponentFixture<PricingComponent>;
let service: PricingService;
const serviceStub = {
load: () => {}
};
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [PricingComponent],
providers: [{
provide: PricingService,
useValue: serviceStub,
}]
}).compileComponents()
}));
beforeEach(() => {
fixture = TestBed.createComponent(PricingComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create the comp', () => {
expect(component).toBeTruthy();
});
});
package.json в части jest
"jest": {
"preset": "jest-preset-angular",
"setupTestFrameworkScriptFile": "./setupJest.ts",
"verbose": true,
"moduleFileExtensions": [
"ts",
"tsx",
"js",
"jsx",
"json",
"node"
],
"transform": {
"^.+\\.jsx$": "babel-jest",
"^.+\\.js$": "babel-jest",
"^.+\\.(ts)$": "./node_modules/jest-preset-angular/preprocessor.js",
"\\.(pug)$": "pug-jest"
},
"testMatch": ["**/__tests__/**/*.+(ts|js)?(x)" , "**/+(*.)+(spec|test).+(ts|js)?(x)"],
"moduleNameMapper": {
"/^app\/(.*)/": "<rootDir>/app/assets/javascript/app/$2"
},
"testPathIgnorePatterns": [
"config",
"app/shared"
]
},
Собственно вот в чем вопрос - как настроить конфиг jest
так, чтобы он адекватно воспринимал такие импорты import { ApiService, QueryFn } from 'app/shared';
?
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Есть строка поискаХочу чтобы при окончании ввода в строку через секунду запускалась(1 раз) функция
Подскажите, как бы начать заново игру после того, как ракетка промахивается по мячу
У меня вебпак не собирает проект, написанный с фичами ES6 и реактомКонфиг вебпака такой: