Configuration error при запуске Jest

217
09 мая 2018, 03:40

Моя эпопея с 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';?

READ ALSO
Запуск функции после setTimeout()

Запуск функции после setTimeout()

Есть строка поискаХочу чтобы при окончании ввода в строку через секунду запускалась(1 раз) функция

180
Как запустить setInterval после clearInterval JavaScript

Как запустить setInterval после clearInterval JavaScript

Подскажите, как бы начать заново игру после того, как ракетка промахивается по мячу

187
Babel не компилирует проект с ES6

Babel не компилирует проект с ES6

У меня вебпак не собирает проект, написанный с фичами ES6 и реактомКонфиг вебпака такой:

184