Auth Middleware не вызывает заглушку - NodeJS, sinon - PullRequest
1 голос
/ 20 мая 2019

Подобные вопросы задавались ранее, и я смотрел и следил за ними, но не повезло:

  1. Заглушка Sinon пропускается как промежуточное программное обеспечение узла Express
  2. промежуточное ПО для заглушки es6 sinon не работает
  3. Как смоделировать промежуточное ПО в 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 ) ПОСЛЕ метод был осквернен, поэтому я не уверен, почему оригинал все еще вызывается.

Я также пытался вручную очистить кеш перед тем, как издеваться, но все равно не работает.

Ответы [ 2 ]

0 голосов
/ 20 мая 2019

Оказывается, что это было связано с supertest.js require app.js .Теперь у меня есть users.spec.js , требующее приложение и передающее его в супер тестовые методы в качестве параметра.Теперь это работает.Все еще не уверены, почему, хотя

0 голосов
/ 20 мая 2019

Я думаю, что решение будет использовать Rewire вместо (или с) Supertest.Rewire позволяет вам высмеивать компоненты верхнего уровня модуля.Хотя вам нужно будет смоделировать промежуточное ПО перед тем, как перейти к Supertest.

...