|  |  | @@ -0,0 +1,107 @@ | 
    
    |  |  | // # Mocha Guide to Testing | 
    
    |  |  | // Objective is to explain describe(), it(), and before()/etc hooks | 
    
    |  |  | 
 | 
    
    |  |  | // 1. `describe()` is merely for grouping, which you can nest as deep | 
    
    |  |  | // 2. `it()` is a test case | 
    
    |  |  | // 3. `before()`, `beforeEach()`, `after()`, `afterEach()` are hooks to run | 
    
    |  |  | // before/after first/each it() or describe(). | 
    
    |  |  | // | 
    
    |  |  | // Which means, `before()` is run before first it()/describe() | 
    
    |  |  | 
 | 
    
    |  |  | // ----------------------------------------------------------------------------- | 
    
    |  |  | 
 | 
    
    |  |  | // should.js is the preferred assertion library | 
    
    |  |  | var should = require('should'); | 
    
    |  |  | 
 | 
    
    |  |  | // **Only 1 test case (in a nameless test suite)** | 
    
    |  |  | it('birds should fly', function(){ | 
    
    |  |  | /** here.should.be.tested | 
    
    |  |  | * However, as long as no error within a it(), | 
    
    |  |  | * it() is considered PASSED */ | 
    
    |  |  | }) | 
    
    |  |  | 
 | 
    
    |  |  | 
 | 
    
    |  |  | // **Only 1 test case, but nested 3-level deep** | 
    
    |  |  | 
 | 
    
    |  |  | // describe() are: | 
    
    |  |  | // - commonly known as test suites, which contains test cases | 
    
    |  |  | // - merely groups, and you can have groups within groups | 
    
    |  |  | describe('galaxy', function(){ | 
    
    |  |  | describe('earth', function(){ | 
    
    |  |  | describe('singapre', function(){ | 
    
    |  |  | it('birds should fly', function(){ /** ... */ }) | 
    
    |  |  | }) | 
    
    |  |  | }) | 
    
    |  |  | }) | 
    
    |  |  | 
 | 
    
    |  |  | 
 | 
    
    |  |  | // **2 test cases in 1 test suite** | 
    
    |  |  | 
 | 
    
    |  |  | // A common scenario. | 
    
    |  |  | describe('singapre', function(){ | 
    
    |  |  | it('birds should fly', function(){ /** ... */ }) | 
    
    |  |  | it('horse should gallop', function(){ /** ... */ }) | 
    
    |  |  | }) | 
    
    |  |  | 
 | 
    
    |  |  | 
 | 
    
    |  |  | // **Run once before the first test case** | 
    
    |  |  | describe('singapre', function(){ | 
    
    |  |  | before(function(){ | 
    
    |  |  | console.log('see.. this function is run ONCE only') | 
    
    |  |  | }) | 
    
    |  |  | it('birds should fly', function(){ /** ... */ }) | 
    
    |  |  | it('horse should gallop', function(){ /** ... */ }) | 
    
    |  |  | }) | 
    
    |  |  | 
 | 
    
    |  |  | 
 | 
    
    |  |  | // **Run once before each test case** | 
    
    |  |  | describe('singapre', function(){ | 
    
    |  |  | beforeEach(function(){ | 
    
    |  |  | console.log('see.. this function is run EACH time') | 
    
    |  |  | }) | 
    
    |  |  | it('birds should fly', function(){ /** ... */ }) | 
    
    |  |  | it('horse should gallop', function(){ /** ... */ }) | 
    
    |  |  | }) | 
    
    |  |  | 
 | 
    
    |  |  | // **2 test suites in a big test suite** | 
    
    |  |  | 
 | 
    
    |  |  | // A common scenario. | 
    
    |  |  | describe('earth', function(){ | 
    
    |  |  | describe('singapre', function(){ | 
    
    |  |  | it('birds should fly', function(){ /** ... */ }) | 
    
    |  |  | }) | 
    
    |  |  | describe('malaysia', function(){ | 
    
    |  |  | it('birds should soar', function(){ /** ... */ }) | 
    
    |  |  | }) | 
    
    |  |  | }) | 
    
    |  |  | 
 | 
    
    |  |  | 
 | 
    
    |  |  | // **before() can be applied to describe() too** | 
    
    |  |  | describe('earth', function(){ | 
    
    |  |  | before(function(){ | 
    
    |  |  | console.log('see.. this function is run ONCE only, before first describe()') | 
    
    |  |  | }) | 
    
    |  |  | describe('singapre', function(){ | 
    
    |  |  | it('birds should fly', function(){ /** ... */ }) | 
    
    |  |  | }) | 
    
    |  |  | describe('malaysia', function(){ | 
    
    |  |  | it('birds should soar', function(){ /** ... */ }) | 
    
    |  |  | }) | 
    
    |  |  | }) | 
    
    |  |  | 
 | 
    
    |  |  | 
 | 
    
    |  |  | // **beforeEach() can be applied to describe() too** | 
    
    |  |  | describe('earth', function(){ | 
    
    |  |  | beforeEach(function(){ | 
    
    |  |  | console.log('see.. this function is run EACH time, before each describe()') | 
    
    |  |  | }) | 
    
    |  |  | describe('singapre', function(){ | 
    
    |  |  | it('birds should fly', function(){ /** ... */ }) | 
    
    |  |  | }) | 
    
    |  |  | describe('malaysia', function(){ | 
    
    |  |  | it('birds should soar', function(){ /** ... */ }) | 
    
    |  |  | }) | 
    
    |  |  | }) | 
    
    |  |  | 
 | 
    
    |  |  | 
 | 
    
    |  |  | 
 |