У меня есть этот файл, который отправляет otp, как показано ниже.
OtpService. js
const generateOTP = async function() {
//
}
const verifyOTP = async function() {
//
}
module.exports = {
generateOTP,
verifyOTP
}
Ниже представлен контроллер, который использует эти методы, otp. js
const { verifyOTP, generateOTP } = require('../../services/OtpService')
const verify = async function(req, res) {
const {error, data} = await generateOTP(req.query.phone)
}
const send = async function(req, res) {
const {error, data} = await verifyOTP(req.query.phone, req.query.otp)
}
module.exports = {
send,
verify
}
ниже находится тестовый файл otp.test. js
const sinon = require('sinon');
const expect = require('chai').expect
const request = require('supertest')
const OtpService = require('../../src/services/OtpService')
console.log(OtpService)
describe('GET /api/v1/auth/otp', function() {
let server
let stub
const app = require('../../src/app')
stub = sinon.stub(OtpService, 'generateOTP').resolves({
error: null,
data: "OTP Sent"
})
server = request(app)
it('should generate OTP', async () => {
const result = await server
.get('/api/v1/auth/otp/send?phone=7845897889')
.set('Accept', 'application/json')
.expect('Content-Type', /json/)
.expect(200)
console.log(result.body)
expect(stub.called).to.be.true
expect(result).to.be.a('Object')
});
});
Выше не работает, он не заглушает методы generateOTP
и verifyOTP
при вызове в контроллере.
Однако, если я вызываю OtpService.generateOTP()
в otp.test.js
, то он работает там, но не работает в контроллере.
Как синон здесь работаешь?
Я запутался здесь. Требуется ли приложение, а затем заглушка, правильно или сначала заглушка, а затем требование?
Я пробовал оба пути, хотя ни один из них не работает. Я также попытался использовать before() and beforeEach()
.
Ниже приведена структура моей папки.
otp.js
(контроллер) здесь controller->AuthController->otp.js
otp.test.js
здесь test->auth->otp.test.js
OtpService.js
только внутри services
Обновление
Я нашел проблему. Если я не использую функцию уничтожения в контроллере, все работает нормально. Таким образом, использование OtpService.generateOTP
работает.
Проблема заключается в разрушении объектов.
const { verifyOTP, generateOTP } = require('../../services/OtpService')
Выше выполняется перед заглушкой. Так что verifyOTP
и generateOTP
уже имеют ссылку на методы unstubbed
.
Мне нужен обходной путь здесь. Я хочу использовать функцию уничтожения.