我寫了一個有向無環圖,可是無法驗證我寫的代碼時正確的。因此引入單元測試,選擇mocha是由於比較多人用。文檔比較全html
代碼示例
import { expect } from 'chai';
import chai from 'chai';
const should = chai.should();
import { isDag } from '../utils/IsDAG';
describe('是不是有向無環圖測試', function() {
this.timeout(50000); // 異步請求須要設置超時時間,否則會報超時錯誤
it('是Dag測試', function(done) {
const graph = [
{
source: 1,
target: 2
},
{
source: 1,
target: 3
}
];
const result = isDag(graph);
expect(result).to.equal(true);
done();
});
it('異步請求測試', function(done) {
const graph = [
{
source: 1,
target: 2
},
{
source: 1,
target: 3
}
];
setTimeout(() => {
const result = isDag(graph);
expect(result).to.equal(true);
done();
}, 2000);
});
it('不是Dag測試-沒有根節點', function(done) {
const graph = [
{
source: 1,
target: 2
},
{
source: 2,
target: 3
},
{
source: 3,
target: 1
}
];
const result = isDag(graph);
result.should.equal(false);
done();
});
it('是Dag測試-只有一個點', function(done) {
const graph = [
{
source: 1
}
];
const result = isDag(graph);
if (result) {
done();
} else {
done('錯誤');
}
});
});
複製代碼
斷言庫expect和should對比node
一、expect的實現侵入性比較低,expect方法會返回一個代理對象,上面綁定了一些能夠用來進行斷言的方法。
二、should的實現是將should一類的方法直接注入到全部的對象裏,破壞性比較高。若是你本身定義了一些和should一類同名的方法就悲劇了es6
引用expect和should斷言庫
var chai = require('chai')
, expect = chai.expect
, should = chai.should();
// Or
import { expect } form 'chai';
import chai.should(); form 'chai';
const should = chai.should();
// 使用expect
expect(foo).to.be.a('string');
expect(foo).to.equal('bar');
expect(foo).to.have.lengthOf(3);
// 使用should
foo.should.be.a('string');
foo.should.equal('bar');
foo.should.have.lengthOf(3);
複製代碼
nyc使用npm
if (window.mochaPhantomJS) { mochaPhantomJS.run(); }
else { mocha.run(); }
複製代碼