gpt4 book ai didi

node.js - 剔除中间件

转载 作者:搜寻专家 更新时间:2023-10-31 23:56:40 25 4
gpt4 key购买 nike

我正在尝试使用 Sinon 在快速路由中 stub 一些自定义中间件,但它没有像我预期的那样工作。我希望它不会记录“我正在验证...”,而是将“Stubbed”记录到控制台。看起来 sinon 没有正确地 stub 中间件。

测试/测试.js

const chai = require('chai');
const chaiHttp = require('chai-http');
const sinon = require('sinon');
chai.use(chaiHttp);
const should = chai.should();
const auth = require('../auth');

const app = require('../app')

describe('My routes', function() {
let checkTokenStub;
beforeEach(()=>{
checkTokenStub = sinon.stub(auth,'checkToken').callsFake(()=>{
console.log('Stubbed');
});;
})
it('returns hello', function(done) {
chai.request(app)
.get('/')
.set('X-Auth-Token', 'xyz123')
.end((err,res)=>{
res.text.should.be.eql('Hello')

done(err)
})
});
});

app.js

var express = require('express'),
app = express();
var router = express.Router();
app.use('/', require('./router'));

module.exports = app;

auth.js

exports.checkToken = function(req, res, next) {

console.log('I am authenticating...')

var authToken = req.get('x-auth-token');

if (!authToken)
return res.sendStatus(401);

next();
}

router.js

var express = require('express'),
router = express.Router();
auth = require('./auth');

router.get('/', auth.checkToken, function(req, res, next) {
return res.send('Hello');
});

module.exports = router;

package.json

{
"name": "sinontest",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "mocha --watch"
},
"author": "",
"license": "ISC",
"devDependencies": {
"chai": "^4.1.2",
"chai-http": "^3.0.0",
"mocha": "^4.0.1",
"sinon": "^4.1.1"
},
"dependencies": {
"express": "^4.16.4"
}
}

最佳答案

@Gonzalo.- 在评论中回答了这个问题。我不得不将应用程序的要求移到 stub 之后。

test.js

const chai = require('chai');
const chaiHttp = require('chai-http');
const sinon = require('sinon');
chai.use(chaiHttp);
const should = chai.should();
const auth = require('../auth');
let app;


describe('My routes', function() {
let checkTokenStub;
before(()=>{
checkTokenStub = sinon.stub(auth,'checkToken').callsFake((req,res,next)=>{
console.log('Stubbed');
next()
});

app = require('../app')

})
it('returns hello', function(done) {
chai.request(app)
.get('/')
.set('X-Auth-Token', 'xyz123')
.end((err,res)=>{
res.text.should.be.eql('Hello')

done(err)
})
});
});

关于node.js - 剔除中间件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55434041/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com