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

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

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

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

settings.js

export default { mySetting: null };

store.js

import settings from "./settings";
export default {
  settings: { ...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);
});

как мне смоделировать эти файлы в settingsDemo.js, чтобы все 3 теста прошли без редактирования settings.js или store.js?

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

Ответы [ 2 ]

0 голосов
/ 07 ноября 2018

Я не уверен, что понимаю ваш вопрос.Похоже, вы просто хотите издеваться над простым объектом
"{settings:{ mySetting: null }}".

let store = {settings:{ mySetting: null }}

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

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

it("mocked to false", () => {
  store.settings.mySetting = false
  expect(store.settings.mySetting).toBe(false);
});
0 голосов
/ 05 ноября 2018

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

В этом случае storeобъект, который содержит вложенный объект settingsХотя невозможно просто присвоить store чему-то другому, можно присвоить store.settings чему-то еще.Также возможно установить store.settings.mySetting на что-то другое:

import store from "./store";

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

it("mocked to true", () => {
  store.settings = { mySetting: true };  // set store.settings to something else
  expect(store.settings.mySetting).toBe(true);  // SUCCESS
});

it("mocked to false", () => {
  store.settings.mySetting = false;  // set store.settings.mySetting to something else
  expect(store.settings.mySetting).toBe(false);  // SUCCESS
});
...