Test Cordova apps on multiple devices at the same time - [link]
One of the biggest benefits of using Cordova for writing mobile apps is the ability to use the same app to target multiple platforms like iOS and Android. To ensure that the apps work well on all the supported platforms, the test matrix needs to have many devices to test the app on.
Most development shops usually have something like a "device wall".
This is usually a range of phones and tablets connected to computers via USB cables, mounted on a wooden board of a wall. Setting this common infrastructure or maintaining it is usually not easy. While they may be great to run automated tests, manual testing basically means that a tester has to interact with each device individually - a process that is time consuming.
Over the weekend, I hacked together a solution that creates a "virtual" device wall. It currently supports Cordova apps and I plan to extend it for use with ReactNative. Here is a video, showing off the capabilities of the virtual device wall.
Using the virtual device wall is simple - simply install the node module called virtual-device-wall in the same directory as your Cordova project. Then run node_modules/.bin/wall from the command line, as described in the project's README.
This command builds the Cordova app, uses the browser-sync capability from the cordova-plugin-browsersync and uploads the app to appetize.io. Once on appetize, the live screens of phones are embedded into a webpage that serves as the device wall.
While this is just an initial prototype with four static devices, the idea can definitely be extended to let the tested add more devices dynamically, or play with other cloud hosted services. You could even hook up your continuous integration system into this system to deliver the "virtual device wall" to your testers for every commit.
The prototype is open source and is hosted on github. You can try it out using npm, or following instructions on the project's home page.
If you think this is a cool idea and would like to try it out, send me a ping and I would love to help you out. There are a bunch of features (like more devices, CI integration, etc) that I am planning to add, and I would love to prioritize what I do first :)