Node.js 如何模拟import express.js supertest?
我有一些控制器/路由,用于处理用户注册:Node.js 如何模拟import express.js supertest?,node.js,unit-testing,express,sinon,supertest,Node.js,Unit Testing,Express,Sinon,Supertest,我有一些控制器/路由,用于处理用户注册: controllers/user.js const User = require('../models/User'); // What I want to mock! ... /** * POST /signup * Create a new local account. */ exports.postSignup = (req, res, next) => { ... const user = new User({
controllers/user.js
const User = require('../models/User'); // What I want to mock!
...
/**
* POST /signup
* Create a new local account.
*/
exports.postSignup = (req, res, next) => {
...
const user = new User({
email: req.body.email,
password: req.body.password
});
...
我想测试是否使用正确的参数调用了User
test/userIntegrationTest.js
const request = require('supertest');
const app = require('../app.js');
const sinon = require('sinon');
const User = require('../models/User');
describe('POST /signup', () => {
it('should create user with valid email', (done) => {
const formdata = {email: 'te.st@gmail.com', password: 'asdf'};
const UserMock = sinon.mock(User); // This mock doesn't do what I want!
request(app)
.post('/signup')
.send(formdata)
.expect(200)
.end(function(res) {
expect(UserMock.calledOnce).to.be.true;
expect(UserMock.calledWith(formdata));
})
});
});
我希望从控制器调用UserMock
,但是此mock似乎只模拟在userIntegrationTest.js
中导入的User
模型
如何模拟在
controllers/User.js
中导入的User
,您可以使用该proxyquirelib()
用法示例:
var apiCallsMock = require('./apiCallsMock');
var messageParser = proxyquire('../messageParser', {'./apiCalls': apiCallsMock});
var app = proxyquire('../index', {'./messageParser': messageParser});