Javascript 为什么从模拟类中的另一个函数调用函数的测试失败?

Javascript 为什么从模拟类中的另一个函数调用函数的测试失败?,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';

我对使用jest测试非常简单的javascript代码有一个问题。因此,我发布代码:

Foo.js

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:结果相同。感谢您的解释,我误解了单元测试的概念。