我正在尝试模拟对服务的调用,但我正在努力处理以下消息:The module factory of jest.mock()
is not allowed to reference any out-of-scope variables。
我正在使用带有 ES6 语法、笑话和酶的 babel。
我有一个简单的组件Vocabulary
,它VocabularyEntry
从 a获取-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: The module factory jest.mock()
is not allowed to reference any out-of-scope variables。无效的变量访问:VocabularyEntry。
据我了解,我不能使用 VocabularyEntry,因为它没有声明(因为 jest 将模拟定义移动到文件的顶部)。
谁能解释一下我该如何解决这个问题?我看到了在模拟调用中需要引用的解决方案,但我不明白如何使用类文件来做到这一点。