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.
Top comments (0)