如何在玩笑中测试调用和应用函数?

Aak*_*rma 3 javascript jestjs

这是我的callnapply.js文件

const callAndApply = {
  caller(object, method, nameArg, ageArg, tShirtSizeArg) {
    method.call(object, nameArg, ageArg, tShirtSizeArg);
  },
  applier(object, method, argumentsArr) {
    method.apply(object, argumentsArr);
  },
};
module.exports = callAndApply;
Run Code Online (Sandbox Code Playgroud)

这是包含非工作测试的测试文件的片段:

const callnapply = require('./callnapply');

test('testing Function.prototype.call as mock function', () => {
    const outer = jest.fn(); 
    const name = 'Aakash';
    const age = 22;
    const tee = 'M';
    callnapply.caller(this, outer, name, age, tee);
    expect(outer.call).toHaveBeenCalledWith(name, age, tee);
});
Run Code Online (Sandbox Code Playgroud)

我如何编写测试来检查method我传递的实际上是否Function.prototype.call仅被函数调用?我想检查是否.call()正在调用,而不是为method调用编写的其他一些实现。

Uly*_* BN 6

您可以模拟.call()方法本身:

const outer = function() {}
outer.call = jest.fn()
Run Code Online (Sandbox Code Playgroud)

然后你可以在outer.call.

这是工作测试文件:

const callnapply = require('./callnapply');

test('testing Function.prototype.call as mock function', () => {
    const outer = function() {};
    outer.call = jest.fn();
    const name = 'Aakash';
    const age = 22;
    const tee = 'M';
    callnapply.caller(this, outer, name, age, tee);
    expect(outer.call).toHaveBeenCalledWith(this, name, age, tee);
});
Run Code Online (Sandbox Code Playgroud)

看到这个工作 REPL