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

Top comments (0)