Pure JavaScript - Real-Skill/support GitHub Wiki

How to start?

Scaffolding

You can use ready pure-javascript scaffolding and not worry about task configurations. It's already done!

Example task structure:

pure-javascript
|-- app
|  |-- app.js
|-- test
|  |-- unit
|  |  |-- app.spec.js
|  |-- karma.conf.js
|-- .gitattributes
|-- .gitignore
|-- .jshintignore
|-- .jshintrc
|-- Gruntfile.js
|-- package.json
|-- README.md

app

The main directory of the whole project. Here put the files constituting the task.

test

Put your tests inside unit folder. Don't forget about .spec.js suffix in file name. Recommended configuration: karma.conf.js

###.gitattributes With text set to "auto". The path is marked for automatic end-of-line normalization.

.gitignore

A .gitignore file specifies intentionally untracked files that Git should ignore.

###.jshintignore Thanks to .jshintignore JSHint can be configured to ignore files based on their location in the filesystem.

###.jshintrc Is used to specifying linting options.

Gruntfile.js

Recommended configuration: Gruntfile.js

To run verify jshint:

 grunt jshint:default

To start developing unit tests

grunt test:dev

package.json

Recommended configuration: package.json

To run verify jshint, tests and coverage:

npm test

README.md

Here, give instructions necessary to do the task.

Recommended configuration

karma.conf.js

module.exports = function (config)
{
    'use strict';

    config.set({
        autoWatch: true,
        basePath: '../',
        frameworks: ['jasmine'],
        files: ['app/**/*.js','test/unit/**/*.spec.js'],
        exclude: [],
        reporters: ['spec', 'coverage', 'junit'],
        preprocessors: {
            'app/**/*.js': 'coverage'
        },
        coverageReporter: {
            dir: 'target/', 
            type: 'cobertura', 
            file: 'coverage.xml'
        },
        junitReporter: {
            outputFile: 'target/test-results.xml'
        },
        port: 8080,
        browsers: ['PhantomJS'],
        plugins: ['karma-phantomjs-launcher', 
                  'karma-jasmine', 
                  'karma-spec-reporter', 
                  'karma-junit-reporter', 
                  'karma-coverage'],
        singleRun: true,
        colors: true,
        logLevel: config.LOG_INFO,
        usePolling: true
    });
};

Gruntfile.js

(function ()
{
    'use strict';

    module.exports = function (grunt)
    {
        grunt.loadNpmTasks('grunt-contrib-jshint');
        grunt.loadNpmTasks('grunt-karma');

        grunt.initConfig({
            karma: {
                options: {
                    configFile: 'test/karma.conf.js'
                },
                unit: {
                    singleRun: true
                },
                dev: {
                    singleRun: false
                }
            },
            jshint: {
                default: {
                    options: {
                        jshintrc: true
                    },
                    files: {
                        src: ['app/**/*.js', 'test/**/*.js']
                    }
                },
                verify: {
                    options: {
                        jshintrc: true,
                        reporter: 'checkstyle',
                        reporterOutput: 'target/jshint.xml'
                    },
                    files: {src: ['app/**/*.js', 'test/**/*.js']}
                }
            }
        });

        grunt.registerTask('verify', ['jshint:verify', 'karma:unit']);
        grunt.registerTask('test:dev', ['karma:dev']);
    };
})();

package.json

{
  "name": "pure-javascript-scaffolding",
  "private": true,
  "version": "0.0.0",
  "dependencies": {},
  "devDependencies": {
    "grunt": "0.4.5",
    "grunt-cli": "0.1.13",
    "grunt-contrib-jshint": "0.11.2",
    "grunt-karma": "0.10.1",
    "jasmine": "2.3.2",
    "jasmine-reporters": "2.0.7",
    "karma": "0.12.16",
    "karma-coverage": "0.3.1",
    "karma-jasmine": "0.1.5",
    "karma-junit-reporter": "0.2.2",
    "karma-phantomjs-launcher": "0.1.4",
    "karma-spec-reporter": "0.0.13"
  },
  "scripts": {
    "test": "grunt verify --force"
  }
}