我要做的事情:运行一个测试,该测试用Supertest模块击中其余接口,并存根一些函数。
设置是:
node.js
BABEL-PLUGIN-REWIRE模块
Sinonjs
摩卡咖啡
文件:
app.js
import * as emailService from './services/emailService';
router.get('/sendEmail',function(req,res,next) {
emailService.send('subject');
});
test.js
import supertest from 'supertest';
import app from '../js/app';
import * as emailService from '../js/services/emailService';
import { __RewireAPI__ as emailRewire } from '../js/services/emailService';
it.only('rewiring test', async function() {
const sendStub = sinon.stub(emailService,'send',function() {
console.log('stubbed');
});
emailRewire.__Rewire__('send',sendStub);
await supertest(app)
.get('/sendEmail')
.expect(200);
});
以上未预期在控制台中"固执"。
我已经尝试了几种解决此类问题的解决方案,包括Rewire和Proxyquire,发现嘲弄是唯一真正有效的嘲弄。
import supertest from 'supertest';
import * as emailService from '../js/services/emailService';
import mockery from 'mockery';
it.only('rewiring test', async function () {
const sendStub = sinon.stub(emailService, 'send', function () {
console.log('stubbed');
});
mockery.enable({
useCleanCache: true,
warnOnUnregistered: false
});
mockery.registerMock('./services/emailService', {
send: sendStub
});
const app = require('../js/app').default;
await supertest(app)
.get('/sendEmail')
.expect(200);
mockery.deregisterAll();
mockery.disable();
});