Nodejs chai and chai-http and sinon

Steve Yang
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':...}*/})
Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade