Я пытаюсь высмеять вызов службы, но я борюсь со следующим сообщением: Модуль factory jest.mock()
не имеет права ссылаться на любые переменные вне области видимости.
Я использую babel с синтаксисом ES6, шуткой и ферментом.
У меня есть простой компонент, называемый Vocabulary
, который получает список VocabularyEntry
-Objects из vocabularyService
и отображает его.
import React from 'react';
import vocabularyService from '../services/vocabularyService';
export default class Vocabulary extends React.Component {
render() {
let rows = vocabularyService.vocabulary.map((v, i) => <tr key={i}>
<td>{v.src}</td>
<td>{v.target}</td>
</tr>
);
// render rows
}
}
vocabularyServise
ist очень просто:
import {VocabularyEntry} from '../model/VocabularyEntry';
class VocabularyService {
constructor() {
this.vocabulary = [new VocabularyEntry("a", "b")];
}
}
export default new VocabularyService();`
Теперь я хочу издеваться над vocabularyService
в тесте:
import {shallow} from 'enzyme';
import React from 'react';
import Vocabulary from "../../../src/components/Vocabulary ";
import {VocabularyEntry} from '../../../src/model/VocabularyEntry'
jest.mock('../../../src/services/vocabularyService', () => ({
vocabulary: [new VocabularyEntry("a", "a1")]
}));
describe("Vocabulary tests", () => {
test("renders the vocabulary", () => {
let $component = shallow(<Vocabulary/>);
// expect something
});
});
Запуск теста вызывает ошибку: Vocabulary.spec.js: babel-plugin-jest-hoist: Модуль factory of jest.mock()
не может ссылаться на любые переменные вне области видимости.
Недопустимый доступ к переменной: VocabularyEntry.
Насколько я не понял, я не могу использовать VocabularyEntry, потому что он не объявляет (поскольку jest переводит определение макета в верхнюю часть файла).
Может кто-нибудь объяснить, как я могу это исправить? Я видел решения, которые требовали, чтобы ссылки содержали макет-вызов, но я не понимаю, как это сделать с помощью файла класса.