Jest
Jest is a Javascript test framework built by Facebook for for use with Node/Javascript applications.
Getting Started
Install Jest using npm i --save-dev jest
. Add to your package.json
:
{
"scripts": {
"test": "jest"
}
}
Then create a function that we can test.
example.js
function sum(a, b) {
return a + b;
}
module.exports = sum;
Next we create a test.
example.test.js
const sum = require('./sum');
test('adds 1 + 2 to equal 3', () => {
expect(sum(1, 2)).toBe(3);
});
Now we can run the test in the terminal with npm run test
.
Mocking
Simple Functions
You can mock simple functions like fetch
or axios
by using the jest.fn(() => {})
syntax.
const someBlackBox = jest.fn(number => 42 + number);
forEach([0, 1], someBlackBox);
// The mock function has been called
expect(someBlackBox).toHaveBeenCalled();
// The mock function is called twice
expect(someBlackBox.mock.calls.length).toBe(2);
// The first argument of the first call to the function was 0
expect(someBlackBox.mock.calls[0][0]).toBe(0);
// The first argument of the second call to the function was 1
expect(someBlackBox.mock.calls[1][0]).toBe(1);
// The return value of the first call to the function was 42
expect(someBlackBox.mock.results[0].value).toBe(42);
You can force certain return values, as well.
const someOtherBlackBox = jest.fn();
console.log(someOtherBlackBox()); // undefined
someOtherBlackBox.mockReturnValueOnce(10).mockReturnValueOnce('x').mockReturnValue(true);
console.log(
someOtherBlackBox(), // 10
someOtherBlackBox(), // 'x'
someOtherBlackBox(), // true
someOtherBlackBox() // true
);
expect(someOtherBlackBox.mock.calls.length).toBe(4);
// etc. etc.
Projects/Multiple Environments[4-5]
If you have elements in your application that need distinct or special test environments, use projects
. This will allow you to use whatever configuration you want on whatever tests you want. Make sure you set up the correct testMatch
values, or you will have a bad time.
References
- https://jestjs.io/
- https://jestjs.io/docs/mock-functions
- https://www.leighhalliday.com/mock-fetch-jest
- https://stackoverflow.com/questions/41318115/testing-two-environments-with-jest
- https://jestjs.io/docs/configuration#projects-arraystring--projectconfig
- https://scribe.rip/swlh/mock-a-library-in-jest-and-typescript-a8bec189efc3
Last modified: 202401040446