notes/mocha-and-testing
Sinon
Sinon 可以让一些测试变得简单起来。
比如说测试 Ajax,数据库的时候,很多时候测试的结果取决于数据库或者 ajax 的返回。我们不希望这样的事情发生。
我们可以用 Test-doubles 来解决这样的问题。
Javascript 里,函数是第一公民,可以作为参数传递。因此,Test-double 就建立在这上面。
Sinon 有三种模式
1、Spy
Spy 这种模式是用来检查函数的执行的。
底层原理:
Spy 的工作原理是将需要 Spy 的函数作为 Callback 传给 Spy 函数,有点类似于中间件,但是不太一样。
这样就利用了 javascript 里的函数是第一公民的特性。
代码类似于这样。
//A simple spy helper
function createSpy(targetFunc) {
var spy = function() {
spy.args = arguments;
spy.returnValue = targetFunc.apply(this, arguments);
return spy.returnValue;
};
return spy;
}
//Let's spy on a simple function:
function sum(a, b) { return a + b; }
var spiedSum = createSpy(sum);
spiedSum(10, 5);
console.log(spiedSum.args); //Output: [10, 5]
console.log(spiedSum.returnValue); //Output: 15
2、Stub
Stub 这种模式可以模拟某些函数的执行,比如 ajax,访问数据库的操作。
3、Increment Stored Data.
JavaScript unit testing guide here
How to Test NodeJS Apps using Mocha, Chai and SinonJS
Unit testing Ajax requests with Mocha