Introduction to Karma-Jasmine
Karma-Jasmine is a popular testing framework that enables developers to write and run unit tests for JavaScript applications efficiently. It combines the powerful features of the Karma test runner with the versatile Jasmine testing library to offer a robust testing environment.
Setting Up Karma-Jasmine
To get started with Karma-Jasmine, you need to install the necessary packages using npm:
npm install --save-dev karma karma-jasmine jasmine-core
Configuring Karma
Next, you need to configure Karma by creating a karma.conf.js
file:
module.exports = function(config) { config.set({ frameworks: ['jasmine'], files: [ 'src/**/*.js', 'test/**/*.spec.js' ], browsers: ['Chrome'], singleRun: true, reporters: ['progress'] }); };
Writing Your First Test
Creating a test file (e.g., example.spec.js
):
describe('Math functions', function() { it('should add two numbers correctly', function() { expect(1 + 1).toBe(2); }); it('should subtract two numbers correctly', function() { expect(2 - 1).toBe(1); }); });
Running Tests
To run your tests, use the following command:
./node_modules/.bin/karma start
Advanced API Features
Karma-Jasmine provides a variety of methods to make testing more effective:
beforeEach
andafterEach
hooks to set up and tear down test environments:
beforeEach(function() { // setup code }); afterEach(function() { // teardown code });
spyOn
to mock functions:const foo = { bar: function() { return 'baz'; } }; spyOn(foo, 'bar'); foo.bar(); expect(foo.bar).toHaveBeenCalled();
Complete Application Example
Let’s consider a small application to manage a list, and we’ll write tests for it.
// app.js class ListManager { constructor() { this.items = []; } addItem(item) { this.items.push(item); } getItems() { return this.items; } } module.exports = ListManager; // test.spec.js const ListManager = require('./app'); describe('ListManager', function() { let listManager; beforeEach(function() { listManager = new ListManager(); }); it('should add item to the list', function() { listManager.addItem('item1'); expect(listManager.getItems()).toContain('item1'); }); it('should return the list of items', function() { listManager.addItem('item2'); expect(listManager.getItems()).toEqual(['item2']); }); });
By integrating the above Karma-Jasmine APIs into your workflow, you can ensure that your JavaScript applications are thoroughly tested and reliable.
Hash: d3ec9171bdc68c9fe51268840ae7444ebfaab5ca0aa2f19a670b89f2e2aa575b