Учитывая приведенные ниже тестовые коды:
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 не работает, если я деконструирую вызов авторизации в промежуточном программном обеспечении, но если я использую объект для выполнения вызова, он будет работать?Какой механизм стоит за этим?