[js hcm] java script- testing the awesome

22
Javascript: Testing the awesome with Mocha and Jasmine

Upload: javascript-meetup-hcmc

Post on 10-May-2015

234 views

Category:

Technology


6 download

DESCRIPTION

Author: Nicolas Embleton @: [email protected] You can follow Nicolas at: https://plus.google.com/+NicolasEmbleton https://twitter.com/nicolasembleton And the Javascript Ho Chi Minh City Meetup: http://meetup.com/JavaScript-Ho-Chi-Minh-City/ https://www.facebook.com/JavaScriptHCMC https://plus.google.com/communities/116105314977285194967 Our group is looking for Projects to mentor. If you have a project you want support for, plz contact us

TRANSCRIPT

Page 1: [Js hcm] Java script- Testing the awesome

Javascript: Testing the awesome with Mocha and Jasmine

Page 2: [Js hcm] Java script- Testing the awesome

● Nicolas● Tung

Speakers

Page 3: [Js hcm] Java script- Testing the awesome

Agenda

● Introduction● Basics (Mocha and Jasmine)● Operators and asserts● Listeners, spies● More advanced examples

Page 4: [Js hcm] Java script- Testing the awesome

Introduction and basics

● Goal 1○ Make your code solid and future-proof

● Goal 2○ Have a systematic way to "catch" regression

problems● Goal 3

○ Maintain a code stability throughout the codebase increase

Page 5: [Js hcm] Java script- Testing the awesome

Introduction and basics

Mocha:● fun● simple● flexible● built for JavaScript (and CoffeeScript)

https://github.com/gmanvn/jshcm-testing

Page 6: [Js hcm] Java script- Testing the awesome

Introduction and basics

● http://jasmine.github.io/○ Built and supported by Pivotal Labs

● Latest Version: 2.0 ● Runs

○ In the browser natively○ With Node.js through a runner (Karma, Protractor,

…)● Simple, elegant, descriptive, full-featured

Page 7: [Js hcm] Java script- Testing the awesome

Basics, Mocha

● solve the async problems● work with every assertion library

○ that throw exceptions● extensible reporters

○ nyan cat included

https://github.com/gmanvn/jshcm-testing

Page 8: [Js hcm] Java script- Testing the awesome

Basics, Jasmine

● Describe your suites with "Describe" to make your code clean and reports readable○ You can even NEST them

describe("mocking ajax", function() {

● Describe each test with "it" and a descriptive comment to explain what the test is doing

it("specifies response when you need it", function() {

Page 9: [Js hcm] Java script- Testing the awesome

Basics, Jasmine● Setup a test suite ("describe") beforeEach(function() {

● Teardown a test suite ("describe") afterEach(function() {

● "Expect" things to be (or not) as they should (or not)

expect(doneFn).not.toHaveBeenCalled();

Page 10: [Js hcm] Java script- Testing the awesome

Basics, Mocha

● support lcov (lib coverage)● support only, skip, --grep● highlight slow test, custom timeouts● [BDD | TDD | QUnit | exports] interface

https://github.com/gmanvn/jshcm-testing

Page 11: [Js hcm] Java script- Testing the awesome

Basics, Jasmine

● Code Coverage through Karma (node.js)● Gem for testing in Rails● Plays well with CoffeeScript● Plays well with MVC Framework (AngularJS

for example)

Page 12: [Js hcm] Java script- Testing the awesome

Basic operators, Mocha

Mocha + Chai + CoffeeScript = Awesomeness● NO bra-ces● NO repeating keywords● NO “deep” pains● Focus only on the test

Page 13: [Js hcm] Java script- Testing the awesome

Basic operators, JasmineWithin tests you use "Matchers"expect(true).toBe(true);

expect(false).not.toBe(true);

expect(a).toBe(b);

expect(a).not.toBe(null);

expect(message).toMatch(/bar/);

expect(message).toMatch("bar");

expect(message).not.toMatch(/quux/);

Page 14: [Js hcm] Java script- Testing the awesome

Basic operators, Mocha

back to the demo

Page 15: [Js hcm] Java script- Testing the awesome

Basic operators, Jasmine

● It can be complex scenarios and matchers, any kind of dynamic code built with JavaScript.

Page 16: [Js hcm] Java script- Testing the awesome

Listeners, Spies: Mocha

No need for spies and listenersJust use callback

Page 17: [Js hcm] Java script- Testing the awesome

Listeners, Spies: Jasmine● You can use Spies to check function callsspyOn(foo, 'setBar');

foo.setBar(123);

expect(foo.setBar).toHaveBeenCalled();

● You can mock Ajax calls via Ajax.jsjasmine.Ajax.install();

var doneFn = jasmine.createSpy("success");

var xhr = new XMLHttpRequest();

Page 18: [Js hcm] Java script- Testing the awesome

Listeners, Spies: Mocha

Page 19: [Js hcm] Java script- Testing the awesome

Listeners, Spies: Jasmine… expect(jasmine.Ajax.requests.mostRecent().url).toBe('/so/cool/');

Page 20: [Js hcm] Java script- Testing the awesome

More advanced examples, JasmineSome sugar: Adding Matchers (awesome)

describe('Hello world', function() { beforeEach(function() { this.addMatchers({ toBeDivisibleByTwo: function() { return (this.actual % 2) === 0; } }); }); it('is divisible by 2', function() { expect(gimmeANumber()).toBeDivisibleByTwo(); });});

Page 21: [Js hcm] Java script- Testing the awesome

About @Tung VuAuthor: Tung Vu@: @gmail.com

You can follow me at:

○ google.com/+TungVuJS

Page 22: [Js hcm] Java script- Testing the awesome

About @NicolasAuthor: Nicolas Embleton @: [email protected]

You can follow me at:● https://plus.google.com/+NicolasEmbleton● https://twitter.com/nicolasembleton

And the Javascript Ho Chi Minh City Meetup:● http://meetup.com/JavaScript-Ho-Chi-Minh-City/● https://www.facebook.com/JavaScriptHCMC● https://plus.google.com/communities/116105314977285194967

○ Our group is looking for Projects to mentor. If you have a project you want support for, contact me