Как по-разному смоделировать зависимость от импорта в каждом тесте - PullRequest
0 голосов
/ 11 октября 2018

У меня есть файл, который импортирует другой.Я хочу смоделировать другой импорт по-разному в каждом тесте, но при этом он должен показываться в файле, который его импортирует.

Я пробовал различные способы имитации и импорта через поиск в Google, но ни один из них не работал.

Рассмотримфайлы:

settings.js

export default { mySetting: null };

store.js

import settings from "./settings";
export default {
  settings,
};

settingsDemo.js

import store from "./store";

it("default settings", () => {
  expect(store.settings.mySetting).toBe(null);
});

it("mocked to true", () => {
  expect(store.settings.mySetting).toBe(true);
});

it("mocked to false", () => {
  expect(store.settings.mySetting).toBe(false);
});

как издеваться settings.js в пределах settingsDemo.js, чтобы пройти все 3 теста?

1 Ответ

0 голосов
/ 11 октября 2018

С "Изучение ES6" :

"В ES6 импорт представляет собой просмотр в режиме реального времени только для экспортируемых значений."

"Обратите внимание, что пока вы можете 't изменить значения импорта, вы можете изменить объекты, на которые они ссылаются. "

Другими словами, невозможно присвоить settings другому объекту, но можно изменить свойствана settings, и эти изменения будут автоматически отображаться, где бы они ни импортировались.

Имея это в виду, вот рабочий тест:

import store from "./store";
import settings from './settings';  // import settings

it("default settings", () => {
  expect(store.settings.mySetting).toBe(null);  // SUCCESS
});

it("mocked to true", () => {
  settings.mySetting = true;  // change the mySetting property
  expect(store.settings.mySetting).toBe(true);  // SUCCESS
});

it("mocked to false", () => {
  settings.mySetting = false;  // change the mySetting property
  expect(store.settings.mySetting).toBe(false);  // SUCCESS
});
...