I’m having problems with Chai Spies. I have a hard time catching how the syntax works.
Here, I am trying the simple example. The myMap
function which mimics the array.map
method:
function myMap(inputArray, callback) {
let newArr = [];
for (i = 0; i < inputArray.length; i++) {
let nEl = callback(inputArray[i]);
newArr.push(nEl);
};
return newArr;
}
module.exports = myMap;
And the test:
const chai = require('chai');
const expect = chai.expect;
const spies = require('chai-spies');
chai.use(spies);
const myMap = require('../problems/my-map');
describe('function myMap', function () {
const arr = [1, 2, 3];
const cb1 = el => el*2;
it('should return new array passed through callback', function () {
expect(myMap(arr, cb1)).to.deep.equal([2, 4, 6]);
});
it('should preserve original array', function () {
expect(arr).to.deep.equal([1,2,3]);
});
it('see if .map used on array', function () {
expect(chai.spy.on(arr, 'map')).to.not.have.been.called();
});
it('callback called array.length times', function () {
let spy1 = chai.spy(cb1);
expect(spy1).to.have.been.called.exactly(arr.length);
})
});
The test number 3 that uses spy works as intended, failing if I introduce .map
method to the function.
But the test number 4 gives the same result of having 0 callbacks while expecting 3. Surely I messed something with syntax, but I couldn’t find any simple examples on the internet.
I’m using downgraded Chai version of 4.3.0, since there’s some conflict with ES6 which I don’t know how to resolve yet.