Introscope: well, very lazy unit testing
We at work write a lot of frequently changing business logic on JS (a startup). Even too much. And all this would be desirable because of the old habit of testing, but somehow quickly, so that tests do not particularly interfere with govnododit when it is needed, and do not tailor the module structure especially strongly for tests. At some point, the thought came that one could also automate it somehow with the help of a simple babel plug-in, so that it would first turn all private variables and methods in the test environment, and in production it would not touch. It turned out to be quite simple and fascinating. This is how Introscope appeared , with which we are now testing everything that is more or less complex.
Having handed over the project, I was distracted for several months to improve the deployment and monitoring, rested, read Habr, and when it took to test something again, I was directly delighted with my own tool! It does not often happen to me. More precisely, never had before. So, I think that thing works. I hope you also come in handy.
In short, what can it do?
- Wraps the entire module in the factory function so that you can create as many new modules during testing as necessary. This eliminates the need to do unmock.
- Since the module is wrapped, the tool knows exactly which variables the module imports and can generate mocks by their type. It works very well for a more or less functional style.
- It knows how to log calls and arguments to functions from external modules and put it all into a log, which is then beautifully serialized for snapshots (if you use Jest, then everything will immediately get started).
- Killer feature: can save the result of a call to an external function and use it with further testing. Very handy when testing requests to external services, which we used to drive into moki.
- In combination with Jest, tests are updated with the click of one (I’m not joking) button U, which updates snapshots. Golden test approach in all its glory.
- Works in production for almost a year.
As a result
Tests began to be written by people who didn’t even want to hear about them before, because you only need to call a function with the necessary parameters and save a log of what happened in this function with one button. I really wanted to test something else ...
Ssylochka: Introscope (there are still gif-screenshots!). I would be very happy constructive criticism and references to the same, but the done is much better: D