заглушка sinon не восстанавливается должным образом, если метод заглушки деконструирован - PullRequest
0 голосов
/ 28 сентября 2018

Учитывая приведенные ниже тестовые коды:

subAuthCall:

const sinon = require('sinon')
const sandbox = sinon.createSandbox()

function stubSuccessCall() {
    return sandbox.stub(authorization, 'authorize').returns({enabled: true});
}

function stubFailedCall() {
    return sandbox.stub(authorization, 'authorize').returns({enabled: false});

function restoreSub() {
    sandbox.restore();
}

в файле authorization.js, у меня есть:

function authorize(data) {
    return data.enabled;
}

module.exports = {
    authorize
}

и затем в промежуточном ПО, У меня есть:

const {authorize} = require('./authorization')


async function check() {
    //import auth data
    console.log(authorize(data))
    if (authorize(data)) {
        //resolve to true
    } else {
        //reject
    }
}

Затем в тестовом примере я позвонил:

afterEach(authorizationStub.restorStub);

describe('auth testing', () => {
    it('test successful', () => {
        authorizationStub.stubSuccessCall();
        return check().then(res => {expect(res.result).to.equl(true)});
    })

    it('test failed', () => {
        authorizationStub.stubFailedCall();
        return check().then(res => {expect(res.result).to.equl(false)});
    })
})

Это слишком упрощенная логика аутентификации и тестовый пример.Странная проблема, с которой я столкнулся, заключается в том, что если я запускаю оба теста, он выводит:

1 - тест пройден успешно

true // из console.log (authorize (data))

2 - тест не пройден

true // from console.log (authorize (data))

1-й тест пройден, а 2-й - неудачен (потому что заглушка не вернуласьправильный результат)

но в тесте не удалось, случай, он должен возвращать false как то, как я заглушаю его в stubFailedCall, но он все равно имеет тот же результат в stubSuccessCall.Я проверил, как называется restoreStub.

Я случайно натолкнулся на исправление: В промежуточном программном обеспечении у меня было:

const {authorize} = require('./authorization')
...

, но если я изменил это на:

const auth = require('./authorization')

, а затем в кодах вместо:

authorize(data) 

Я делаю:

auth.authorize(data)

Это будет работать - оба теста пройдут без каких-либо других изменений.

Мой вопрос: почему заглушка / восстановление заглушки sinon не работает, если я деконструирую вызов авторизации в промежуточном программном обеспечении, но если я использую объект для выполнения вызова, он будет работать?Какой механизм стоит за этим?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...