Nodejs chai and chai-http and sinon
Aug 31, 2018 · 2 min read
沒用過,紀錄一下
最近看到用 chai + chai-http+ sinon 來 mock server。
假設要測的 function 叫 serverResp
此 function 內有一個 module 叫 XXX 且 XXX 有 sub function 叫 subServerResp
現在要用 serverResp 架一個 express server 然後在把 subServerResp 替換掉(stub 掉)
// XXX.js
export.subServerResp = ...// server.js
export.serverResp = ... // somewhere call XXX.subServerResp()
require
const chai = require(‘chai’);
const chaiHttp = require(‘chai-http’);
const sinon = require('sinon');
const myServer = require('server.js');用 myServer function 架一個 express server
const server = express();
chai.use(chaiHttp);
server.use(myServer);
server.get('/', (req, res) => res.send());把 myServer 內部的 sub function mock 掉
// test.js
describe('test subServerResp', () => {
beforeEach(done => {
sinon
.stub(XXX.prototype, 'subServerResp')
.resolves({'resp': ...});
});
afterEach(done => {
XXX.prototype.subServerResp.restore();
)};
it('...', ()=>{ /*這裡面就可以直接用 XXX.subServerResp() 但是被 mock 掉的版本(也就是只會回{'resp':...}*/})