开玩笑的模拟实现不适用于 require('')
jest mock implementation is not working with require('')
我想测试一个使用第 3 个库获取数据的 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
});
});
您的需求顺序有误。当您在设置模拟 reference
之前需要 ./foo
时,foo
s reference
将根据 Jest automocking 未定义。
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
});
});
行
var foo = require('./foo');
在 describe
中计算并存储在 foo
中。
之后,在 it
块中,您正在模拟它,但这不适用于旧参考 foo
。
在 mockImplementation
调用之后放置 foo
将修复错误。
//Test code
jest.dontMock('./foo');
jest.dontMock('console');
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(foo.getResult()); // undefined
console.log(reference.result()); // 123
});
});
我想测试一个使用第 3 个库获取数据的 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
});
});
您的需求顺序有误。当您在设置模拟 reference
之前需要 ./foo
时,foo
s reference
将根据 Jest automocking 未定义。
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
});
});
行
var foo = require('./foo');
在 describe
中计算并存储在 foo
中。
之后,在 it
块中,您正在模拟它,但这不适用于旧参考 foo
。
在 mockImplementation
调用之后放置 foo
将修复错误。
//Test code
jest.dontMock('./foo');
jest.dontMock('console');
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(foo.getResult()); // undefined
console.log(reference.result()); // 123
});
});