How do I test call and apply functions in jest?

旧街凉风 提交于 2020-01-04 04:23:08

问题


Here's my callnapply.js file

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;

And here's a snippet from the test file which contains the non-working test:

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);
});

How do I write the test to check if the method that I am passing is, in fact, being called by the Function.prototype.call function only? I want to check whether .call() is being called and not some other implementation that has been written for the method call.


回答1:


You can mock the .call() method itself:

const outer = function() {}
outer.call = jest.fn()

Then you can do usual jest mock tests on outer.call.

Here is the working test file:

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);
});

See this working REPL.



来源:https://stackoverflow.com/questions/48427099/how-do-i-test-call-and-apply-functions-in-jest

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!