Подобные вопросы задавались ранее, и я смотрел и следил за ними, но не повезло:
- Заглушка Sinon пропускается как промежуточное программное обеспечение узла Express
- промежуточное ПО для заглушки es6 sinon не работает
- Как смоделировать промежуточное ПО в Express, чтобы пропустить проверку подлинности для модульного теста?
Общий ответ, который я получаю, заключается в том, что модуль (app.js
в моем случае) должен быть обязательным ПОСЛЕ метод промежуточного программного обеспечения аутентификации был заглушен. Я сделал это, но все еще вызывает оригинальное промежуточное ПО:
ЦСИ / app.js
const authentication = require('./authentication')
...
app.use(['/api/users', '/api/groups'], authentication.ensureAuthenticed])
module.exports = app
ЦСИ / authentication.js
const { isValidAuth } = require('./lib')
exports.ensureAuthenticated = (req, res, next) => {
...
}
__ __ хелперы / supertest.js
// This file just calls endpoints with supertest but this is the only file
// that includes 'app'
const app = require('../../src/app')
module.exports = {
post: {
...
},
get: {
...
},
put: {
...
},
delete: {
...
}
}
users.spec.js
const authentication = require('../../src/authentication')
const authenticationStubs = require('../__stubs__/authentication')
let supertest
let ensureAuthStub
describe('Users', () => {
before(() => {
ensureAuthStub = sinon.stub(authentication, 'ensureAuthenticated').callsFake(authenticationStubs.ensureAuthenticated)
supertest = require('../__helpers__/supertest')
})
// tests
after(() => {
ensureAuthStub.restore()
})
})
__ окурки __ / authentication.js
exports.ensureAuthenticated = (req, res, next) => {
...
}
В users.spec.js , я загружаю в supertest.js (который загружается в src / app.js ) ПОСЛЕ метод был осквернен, поэтому я не уверен, почему оригинал все еще вызывается.
Я также пытался вручную очистить кеш перед тем, как издеваться, но все равно не работает.