DEV Community

Abdullah Al Mamun Fahim
Abdullah Al Mamun Fahim

Posted on

Adding Jest To Explainer.js

This week we were supposed to add test to our cli tool. So far the most frustrating thing to do.

Why I chose Jest

I'm a huge supporter for TDD(Test Driven Development). Almost every piece code should be tested. During my co-op more than half of the time I spent writing test for my PR. I believe that experience really helped me understand the necessity of testing. I was surprised to see how similar the testing framework in JS and Ruby are. I used Jest which is very similar to RSpec I have used during my co-op. To mock http resquest I used Nock kinda similar to something called VCR.

Issues I have faced (A lot of em)

Main problem I faced was I used ESM instead of CommonJS. Which made my life much harder. First issue was jest.mock not working. After some research I realized the way to mock is different in ESM. Unfortunately even after following the docs I could not get it to work. So, I had to do jest.spyOn. Second issue I faced was since execa runs in child_process the index.test.js although runs it does not effect the coverage report. So I had to use jest.spyOn to rewrite the test. I also had to refactor index.js so that it does not take the flags I'm passing to jest. Other smaller issue I faced was, using node --experimental-vm-modules --no-warnings node_modules/jest/bin/jest.js -c jest.config.mjs instead of jest -c jest.config.mjs cause I was using ESM. I also had to use mock-fs to replicate file system to test FilepathResolver.test.js because simple jest.spyOn did not test it thoroughly enough. I was surprised how many roadblocks were cause by just using ESM and it just reflects what a mess JS is.

After a lot of trial error I got a pretty good coverage.

Test Coverage

SurveyJS custom survey software

Build Your Own Forms without Manual Coding

SurveyJS UI libraries let you build a JSON-based form management system that integrates with any backend, giving you full control over your data with no user limits. Includes support for custom question types, skip logic, an integrated CSS editor, PDF export, real-time analytics, and more.

Learn more

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay