Angular2 + - Не удается найти модуль при передаче в качестве переменной - тестирование - PullRequest
0 голосов
/ 24 августа 2018

В моем тесте мне нужен файл .json с данными, которые я проверю. Тем не менее, я не могу передать строку, где найти его в требовании ...

Рабочий код

const data = require('../../../assets/data.json');

Не работает

const jsonUrl = '../../../assets/data.json';
const data = require(jsonUrl);

Я хочу использовать переменную jsonUrl, так как эта строка URL-адреса будет использоваться несколько раз в самом тесте. Я просто не понимаю, почему он не может его найти?


Поправка к вопросу:

Так как насмешка - это путь, и я не знаю точно, как это сделать ... Я поправляю вопрос, чтобы помочь с этим.

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

Вот что я тестирую ...

data.json

[
  {
    "name": "one",
    "id": 1,
  },
  ...
  // This format is used for approx 20 entries
]

component.ts

ngOnInit() {
   loadData().subscribe(data => {
       this.data = data;
    };
}

loadData() {
   const statusUrl = '../../../assets/data.json';
   return this.httpClient.get(statusUrl);
}

test.ts Получающему не удается найти модуль из-за указанной выше проблемы.

it('should load status data from local json', fakeAsync(() => {
    const jsonUrl = '../../../assets/status.json';
    const data = require(jsonUrl);
    const request = httpMock.expectOne(jsonUrl);
    request.flush(data);
    expect(component.status).toEqual(data);
  }));

1 Ответ

0 голосов
/ 24 августа 2018

Это было решено, сделав его равным любому виду объекта:

it('should load status data from local json', fakeAsync(() => {
    const jsonUrl = '../../../assets/greyhound.status.json';
    const data = [];

    const request = httpMock.expectOne(jsonUrl);
    request.flush(data);
    expect(component.raceStatuses).toEqual(data);
  }));
...