我想测试一个使用一个第三个lib来获取数据的JS,所以我使用jest mock来实现。当我在测试中直接调用它时,它正在工作。但是,它在源代码中使用时无效。
这是代码
//Source implementation
var reference = require('./reference');
module.exports = {
getResult: function() {
return reference.result();
}
};
//Test code
jest.dontMock('./foo');
jest.dontMock('console');
describe('descirbe', function() {
var foo = require('./foo');
it('should ', function() {
var reference = require('./reference');
reference.result.mockImplementation(function (a, b, c) {
return '123'
});
console.log(foo.getResult()); // undefined
console.log(reference.result()); // 123
});
});
答案 0 :(得分:4)
您的要求顺序错误。如果您在设置模拟./foo
之前需要reference
,那么根据Jest自动锁定,foo
reference
将被取消定义。
jest.dontMock('./foo');
describe('describe', function() {
it('should ', function () {
var reference = require('./reference');
reference.result.mockImplementation(function (a, b, c) {
return '123';
});
var foo = require('./foo');
console.log('ferr', foo.getResult()); // ferr 123
});
});
答案 1 :(得分:4)
该行
def pretty_print(dict):
with open('example.txt', 'w') as out_file:
for (key, value) in sorted(dict.items()):
out_file.write('%s %s\n' % (key, value))
h = { 'a': 1, 'b': 2 }
pretty_print(h)
在var foo = require('./foo');
中进行评估,并存储在describe
。
之后,在foo
区块中,您将其嘲笑,但这并不适用于旧参考it
。
在foo
调用之后放置foo
将解决错误。
mockImplementation