我要做的是:运行一个测试,使用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);
});
以上内容未按预期在控制台中打印“stubbed”。
答案 0 :(得分:0)
我为这样的问题尝试了几种解决方案,包括重新发送和代理查询,并发现mockery是唯一真正有用的问题。
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();
});