RequireJS template for Jasmine unit tests
Installation
By default, this template works with Jasmine 2.x
npm install grunt-template-jasmine-requirejs --save-dev
Support for both Jasmine 1.x and 2.x
You'd install ~0.1
version of this template if your test specs are based on Jasmine 1.x
npm install grunt-template-jasmine-requirejs@~0.1 --save-dev
Options
vendor
Type: String|Array
Works same as original. But they are loaded before require.js script file
helpers
Type: String|Array
Works same as original. But they are loaded after require.js script file
Template Options
templateOptions.version
Type: String
Options: 2.0.0
to 2.1.10
or path to a local file system version(relative to Gruntfile.js). Absolute path is allowed as well. Default: latest requirejs version included
The version of requirejs to use.
templateOptions.requireConfigFile
Type String
or Array
This can be a single path to a require config file or an array of paths to multiple require config files. The configuration is extracted from the require.config({}) call(s) in the file, and is passed into the require.config({}) call in the template.
Files are loaded from left to right (using a deep merge). This is so you can have a main config and then override specific settings in additional config files (like a test config) without having to duplicate entire requireJS configs.
If requireConfig
is also specified then it will be deep-merged onto the settings specified by this directive.
templateOptions.requireConfig
Type: Object
This object is JSON.stringify()
-ed ( support serialize Function object ) into the template and passed into var require
variable
If requireConfigFile
is specified then it will be loaded first and the settings specified by this directive will be deep-merged onto those.
Sample usage
grunt.initConfig({
connect: {
test : {
port : 8000
}
},
jasmine: {
taskName: {
src: 'src/**/*.js',
options: {
specs: 'spec/*Spec.js',
helpers: 'spec/*Helper.js',
host: 'http://127.0.0.1:8000/',
template: require('grunt-template-jasmine-requirejs'),
templateOptions: {
requireConfigFile: 'src/main.js'
}
}
}
}
});
grunt.initConfig({
connect: {
test : {
port : 8000
}
},
jasmine: {
taskName: {
src: 'src/**/*.js',
options: {
specs: 'spec/*Spec.js',
helpers: 'spec/*Helper.js',
host: 'http://127.0.0.1:8000/',
template: require('grunt-template-jasmine-requirejs'),
templateOptions: {
requireConfig: {
baseUrl: 'src/',
paths: {
"jquery": "path/to/jquery"
},
shim: {
'foo': {
deps: ['bar'],
exports: 'Foo',
init: function (bar) {
return this.Foo.noConflict();
}
}
},
deps: ['jquery'],
callback: function($) {
}
}
}
}
}
}
});
grunt.initConfig({
connect: {
test : {
port : 8000
}
},
jasmine: {
taskName: {
src: 'src/**/*.js',
options: {
specs: 'spec/*Spec.js',
helpers: 'spec/*Helper.js',
host: 'http://127.0.0.1:8000/',
template: require('grunt-template-jasmine-requirejs'),
templateOptions: {
requireConfigFile: 'src/main.js',
requireConfig: {
baseUrl: 'overridden/baseUrl',
shim: {
'foo': {
deps: ['bar'],
exports: 'Foo'
}
}
}
}
}
}
}
});
grunt.initConfig({
connect: {
test : {
port : 8000
}
},
jasmine: {
taskName: {
src: 'src/**/*.js',
options: {
specs: 'spec/*Spec.js',
helpers: 'spec/*Helper.js',
host: 'http://127.0.0.1:8000/',
template: require('grunt-template-jasmine-requirejs'),
templateOptions: {
requireConfigFile: ['src/config.js', 'spec/config.js']
requireConfig: {
baseUrl: 'overridden/baseUrl'
}
}
}
}
}
});
Note the usage of the 'connect' task configuration. You will need to use a task like
grunt-contrib-connect if you need to test your tasks on a running server.
RequireJS notes
If you end up using this template, it's worth looking at the
source in order to familiarize yourself with how it loads your files. The load process
consists of a series of nested require
blocks, incrementally loading your source and specs:
require([*YOUR SOURCE*], function() {
require([*YOUR SPECS*], function() {
require([*GRUNT-CONTRIB-JASMINE FILES*], function() {
}
}
}
If "callback" function is defined in requireConfig, above code will be injected to the end of body of "callback" definition
templateOptions: {
callback: function() {
define("config", {
"endpoint": "/path/to/endpoint"
})
}
}
Generated runner page with require configuration looks like:
var require = {
...
callback: function() {
define("config", {
"endpoint": "/path/to/endpoint"
})
require([*YOUR SOURCE*], function() {
require([*YOUR SPECS*], function() {
require([*GRUNT-CONTRIB-JASMINE FILES*], function() {
}
}
}
}
...
}
This automation can help to avoid unexpected dependency order issue
Change Log
- v0.2.2 Fixed regression which casued by #65
- v0.2.1 Fixed #65
- v0.2.0 Added Jasmine 2 support
- v0.1.10 03.14.14, Fixed #53, #52, #46, #36 wrong path error when runner outfile is specified at elsewhere
- v0.1.9, 02.04.14, #57 prevents conflict with
grunt-contrib-jasmine
0.6.x, added requirejs 2.1.9 & 2.1.10
Authors / Maintainers
- Jarrod Overson (@jsoverson)
- Cloud Chen (@cloudchen)