Когда я запускаю тест, все заглушки, которые у меня есть, работают нормально, но в constructor () {} класса EmailFactory не заглушается и возвращает ошибку, даже заглушку EmailFactoryStub .buildMail возвращает то, что я хочу (работает нормально), но не конструктор. Тест продолжает загружаться в течение длительного времени после console.log ('10 ', emailContent), и когда он заканчивается, возвращается ошибка, подобная этой:
⠦ 10 null
⠹ err : { Error: socket hang up
at createHangUpError (_http_client.js:323:15)
at Socket.socketOnEnd (_http_client.js:426:23)
at Socket.emit (events.js:203:15)
at Socket.EventEmitter.emit (domain.js:448:20)
at endReadableNT (_stream_readable.js:1145:12)
at process._tickCallback (internal/process/next_tick.js:63:19) code: 'ECONNRESET', response: undefined }
⠦ 7/4/CA06 -> Update employees that were repeated with masive charge
Это некоторый код файлов. Структура теста . js:
const test = require('ava');
const request = require('supertest');
const sinon = require('sinon');
const proxyquire = require('proxyquire');
let EmailFactoryStub = {}
test.beforeEach(async t => {
sandbox = sinon.createSandbox();
EmailFactoryStub = {
'@global': true
}
server = proxyquire('../../server.js', {
'./libs/emailFactory': EmailFactoryStub,
})
})
test.serial.cb.only('Test EmailFactory', t => {
EmailFactoryStub.buildMail = sandbox.stub()
EmailFactoryStub.buildMail.withArgs(sinon.match.any).returns(null)
EmailFactoryStub = sandbox.stub()
/*
*On this part (request) all works fine in controller,
*I don't put here the vars 'employeeFixture' and 'token'
*to focus the main problem
*/
request(server)
.put(context + '/employees/batch')
.send(employeeFixture)
.set('Authorization', `bearer ${token}`)
.expect(200)
.end(function (err, res) {
t.falsy(err, 'should not return an error')
console.log('err :', err);
t.end()
})
})
Библиотека, импортированная в тест, - это / libs / emailFactory. js
const Mailgun = require('mailgun-js')
class EmailFactory {
constructor(from, to, subject, html, text) {
console.log('FIRST');
// Configure email options
this.from = from
this.to = to
this.subject = subject
this.content = {}
this.content.html = html
this.content.text = text
// Create mg instance
this.mg = new Mailgun({
apiKey: serverConfig.mail.api_key,
domain: serverConfig.mail.domain,
testMode: false,
testModeLogger: logger
})
}
static buildMail(contentFile, keys = [], values = []) {
// Configure path files
let rootPath = path.resolve('.')
let filepath = `${rootPath}/views/${contentFile}`
// Read files
let content = fs.readFileSync(filepath, 'utf8')
for (var i = 0; i < keys.length; i++) {
content = content.replace(keys[i], values[i])
}
content = content.replace('currentYear', new Date().getFullYear())
return content
}
}
И код контроллера. js:
//controller.js
let emailContent = EmailFactory.buildMail('user_active.html', [
'username',
'url_login'
], [
`${user.first_name || user.email}`,
`${serverConfig.app.numina_server}`
])
console.log('10', emailContent);
//At this point stub works fine, because 'emailContent' returns what I put in test.
let mail = new EmailFactory(
serverConfig.mail.sender,
user.email,
serverConfig.mail.subject.user_active,
emailContent,
emailContent
)
//And at this point does not work and return the error :(
console.log('mail :', mail);
Я читал о Требуется глобальное переопределение , но я не уверен если это действительно проблема.