Hello:

    I've recently been faced with updating an old GS extension, and I decided to use unit tests for it. The approach I took involved some tooling to be able to test code using karma with jasmine and PhantomJS, webpack was used to solve most of the issues I encountered. This should work for any GJS application. Following are some comments on what I did.

Repository of extension using unit tests:

https://github.com/emerinohdz/power-alt-tab

1. GJS Imports mechanism is replaced with ES6 imports, by defining the
   target library to UMD for webpack this shouldn't be a problem.
   Webpack creates a single file with all the needed configurations.
2. Since we are using ES6 imports now, there's no problem while
   testing. Karma has to be setup with support for webpack though.
3. For unit testing to work fine, I had to include a GS polyfill
   (test/polyfill_gs.js). This polyfill only covers what I needed, the
   way I needed it, mostly mocking every global GS object needed.
4. Integration testing was not possible, this would be a huge step
   forward. Providing some type of test API where things could be
   integrated and tested before moving to production would mean faster
   delivery of new functionality IMO. This is of course the greatest
   challenge.
5. Tests can be run on PhantomJS. For this to work, I had to use a
   transpiler (babel) with webpack. This has the added benefit of
   generating JS code that is backwards compatible between GS versions,
   while allowing us to use ES6 features now.
6. This was all integrated with Travis CI (see the github repo for
   reference).

NOTE: I had to keep classes that extend native GS classes using Lang.Class instead of ES6 classes, because there were some problems with the transpiled code when calling super constructors. If you are not using a transpiler for releases, all classes can be refactored to ES6.

    I've posted a similar email to the GSE mailing list, but I thought it would be helpful for any GJS developer looking to create quality code by applying TDD.

It'll be great to read your thoughts on this approach.

Regards.

_______________________________________________
javascript-list mailing list
javascript-list@gnome.org
https://mail.gnome.org/mailman/listinfo/javascript-list

Reply via email to