grunt-cordova-jasmine

Automate Jasmine test suite execution for Cordova plugins inside emulators/devices

grunt-cordova-jasmine

This project contains a Grunt plugin which automates Jasmine Test Suite execution for Apache Cordova plugins. Currently only the Android part is implemented.

You can find a relevant video which depicts the execution procedure here.

This plugin assumes that Android SDK, Ant and Git are already configured in the execution environment.

The plugin requires Grunt ~0.4.1

If you haven't used Grunt before, be sure to check out the Getting Started guide, as it explains how to create a Gruntfile as well as install and use Grunt plugins. Once you're familiar with that process, you may install this plugin with this command:

npm install grunt-cordova-jasmine --save-dev

Once the plugin has been installed, it may be enabled inside your Gruntfile with this line of JavaScript:

grunt.loadNpmTasks('grunt-cordova-jasmine');

This task configures the Cordova libraries, sets the given Cordova version, creates a Cordova project, installs the given plugin and executes the configured Jasmine test suite inside emulators and devices. You can execute the task by using:

execute-jasmine-suite:jasmine-suite-1 where jasmine-suite-1 is the jasmine id as shown below

grunt.initConfig({
    grunt_cordova_jasmine: {
        jasmine: [{
            id: "jasmine-suite-1",
            project: {
                android: {
                    targetDir: "./temp/projects/cordova-android",
                    name: "CordovaAndroid",
                    package_name: "org.example.cordova.android",
                    sdk: 'android-18',
                    cordova_version: "3.0.0"
                }
            },
            plugin_test: {
                targetDir: "./temp/plugins",
                testsDir: "./tests",
                testsuite: "index.html",
                plugin: '../aerogear-pushplugin-cordova'
            },
            platforms: ["android"],
            device_ids: {
                android: [/*"emulator-5554", "emulator-5558"*/]
            }
        }],
        cordova_libs: {
            android: {
                path: '',
                git: {
                    url: "https://github.com/tolis-e/cordova-android.git",
                    targetDir: "./temp/cordova-libraries"
                }
            }
        }
    }
});

Type: String
Description: A custom identifier which helps the plugin to read the correct configuration from the Gruntfile
Usage: [required]

Type: String
Description: Specifies the directory of the new Cordova Android project which is created by the plugin
Usage: [required]

Type: String
Description: Specifies the main activity name
Usage: [required]

Type: String Description: Specifies the project's package
Usage: [required]

Type: String
Description: Specifies the target SDK
Usage: [optional]

Type: String
Description: Specifies the Cordova version
Usage: [optional]
This plugin has been tested for Cordova versions >=3.0.0

Type: String
Description: Specifies the directory to hold the fetched plugin
Usage: [required]

Type: String
Description: Specifies the directory which contains all the test resources (Jasmine Test Suite, JS libraries etc)
Usage: [required]

Type: String
Description: Specifies the Jasmine Test Suite which will be executed inside the emulators/devices
Usage: [required]

Type: String
Description: Local path of the plugin which is under testing or the Cordova plugin's registry id
Usage: [required]

Type: String
Description: Local path of the cordova-android library
Usage: [optional]
If this setting is not provided, the cordova-android library will be cloned from GitHub

Type: String
Description: GitHub URL of the repository which holds the cordova-android library
Usage: [optional]

Type: String Description: The directory to hold the cloned cordova-android repository
Usage: [optional]

If cordova_libs_android_path is defined, then cordova_libs.git.url && cordova_libs.git.targetDir settings are ignored. If all settings are empty then the proccess stops with a failure status.

Type: Array
Description: Specifies the target platforms
Currently only android is supported

Type: Array
Description: Specifies the emulator/device serial numbers in which the Jasmine Suite should be executed.
If it is empty, the tests will be executed inside all the available emulators/devices recognized during the process execution.

The plugin expects that the Jasmine Test Suite contains the Jasmine HTML reporter.

<script type="text/javascript" src="whatever/HtmlReporter.js"></script>

or

<script type="text/javascript" src="whatever/jasmine-html.js"></script>

The Html reporter name should match one of the following regular expressions:

jasmine([^>]*)html([^>]*)js or HtmlReporter([^>]*)js

In addition the plugin searches for a Jasmine addReporter and adds a custom reporter after this line.

Note that when selecting a specific cordova version, the framework app of cordova-android requires a specific target sdk to be installed. Make sure that this target sdk is installed in your environment. In the example which is shipped with the project, the cordova version is set to be 3.0.0. This means that you must have android target sdk android-17 installed in your environment, since cordova-android version 3.0.0 requires the target sdk android-17.

The example folder contains a sample example which depicts how to use this plugin. This example is running on Travis CI

Released 01 November 2013

  • Initial release