###Quick set up for writing AngularJS tests in ES6 using Karma, Jasmine, Browserify and Stringify.
###Example Structure
src/
test/
views/
karma.conf.js
Module.js
<!-- views/hello-world.html --> | |
<div>{{ ctrl.greet }} {{ ctrl.name }}</div> |
/** src/HelloWorldDirective.js **/ | |
import helloWorldTemplate from './../views/hello-world.html'; | |
class HelloWorldController { | |
constructor() { | |
this.greet = 'Hello'; | |
} | |
} | |
function HelloWorldDirective() { | |
return { | |
scope: { | |
name: '@' | |
}, | |
controller: HelloWorldController, | |
controllerAs: 'ctrl', | |
bindToController: true, | |
replace: true, | |
template: helloWorldTemplate | |
} | |
} | |
export default HelloWorldDirective; |
/** test/HelloWorldDirective.js **/ | |
describe('The HelloWorldDirective', () => { | |
let element, scope; | |
beforeEach(angular.mock.module('app')); | |
beforeEach(inject(function(_$rootScope_,_$compile_) { | |
let $rootScope = _$rootScope_, | |
$compile = _$compile_; | |
scope = $rootScope.$new(); | |
element = angular.element('<hello-world data-name="{{ name }}"></hello-world>'); | |
$compile(element)(scope); | |
})); | |
it('should display the defined name', () => { | |
let name = 'Some rendered text'; | |
scope.name = name; | |
scope.$digest(); | |
expect(element.text()).toContain(`Hello ${name}`); | |
}); | |
}); |
module.exports = function(config) { | |
config.set({ | |
basePath: '', | |
frameworks: ['browserify', 'jasmine'], | |
files: [ | |
'node_modules/angular/angular.min.js', | |
'node_modules/angular-mocks/angular-mocks.js', | |
'Module.js', | |
'views/*', | |
'src/**/*.js', | |
'test/**/*test.js' | |
], | |
exclude: [ | |
], | |
preprocessors: { | |
'Module.js': ['browserify'], | |
'views/*' : ['browserify'], | |
'src/**/*.js': ['browserify'], | |
'test/**/*test.js': ['browserify'] | |
}, | |
browserify: { | |
debug: true, | |
transform: ['babelify', 'stringify'] | |
}, | |
reporters: ['progress'], | |
port: 9876, | |
colors: true, | |
logLevel: config.LOG_DEBUG, | |
autoWatch: true, | |
browsers: ['PhantomJS'], | |
singleRun: false | |
}); | |
}; |
import HelloWorldDirective from './src/HelloWorldDirective'; | |
angular.module('app', []) | |
.directive('helloWorld', HelloWorldDirective); |
Does it support promises?