Javascript 为什么从模拟类中的另一个函数调用函数的测试失败?
我对使用jest测试非常简单的javascript代码有一个问题。因此,我发布代码: Foo.jsJavascript 为什么从模拟类中的另一个函数调用函数的测试失败?,javascript,jestjs,Javascript,Jestjs,我对使用jest测试非常简单的javascript代码有一个问题。因此,我发布代码: Foo.js export class Foo { constructor() { } someFn() { this.internalFn(); } internalFn() { } } Foo.spec.js jest.mock('../src/foo'); import {Foo} from '../src/foo';
export class Foo {
constructor() {
}
someFn() {
this.internalFn();
}
internalFn() {
}
}
Foo.spec.js
jest.mock('../src/foo');
import {Foo} from '../src/foo';
describe('Foo', () => {
it ('test foo', () => {
const foo = new Foo();
foo.someFn();
expect(foo.someFn.mock.calls.length).toBe(1);
expect(foo.internalFn.mock.calls.length).toBe(1); // why received 0 ???
})
})
为什么第二个期望会失败?foo.internalFn是从foo.someFn调用的。模拟函数实际上不会做任何事情(除了计算调用频率等) 这就是为什么在模拟函数
someFn()
时会调用internalFn()
//编辑:只是一些澄清
当您对软件进行单元测试时,您希望对其进行模块化和隔离测试。
函数应该能够独立工作,即使它们在内部被其他函数调用
当您想测试函数someFn()
时,必须模拟internalFn()
,因为您想检查调用someFn()
是否实际调用了internalFn()
如果您想测试任何其他将调用
someFn()
的东西,您必须模拟它。尝试执行this.someFn=this.someFn.bind(this)在构造函数中编写>并查看是否解决了问题。@connexo:结果相同。感谢您的解释,我误解了单元测试的概念。