|
|
@@ -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(){ /** ... */ }) |
|
|
}) |
|
|
}) |
|
|
|
|
|
|
|
|
|