Я использую репортер mochawesome для своих тестов мокко.Я бы хотел, чтобы он также записывал мою запись в журнал и присоединял ее к любому тесту, который выполнялся на момент написания журнала.Это может быть достигнуто с addContext()
.Однако я также хочу, чтобы журналы выводились на консоль, поэтому я могу отслеживать их во время выполнения теста, а не ждать, пока он все завершит и отчет будет сгенерирован.
IУ меня 98% решения, основанного на этом ответе , но я борюсь из-за того, что mochawesome addContext()
требует, чтобы вы передали ему тестовый объект.Вот что у меня есть:
beforeEach(`Spy on logger`, function() {
const origLogInfo = logger.info.bind(logger),
origLogError = logger.error.bind(logger),
testContext = this
sinon.stub(logger, 'info').callsFake(function(message) {
addContext(testContext, `INFO: ${message}`)
origLogInfo.call(testContext, message)
})
sinon.stub(logger, 'error').callsFake(function(message) {
addContext(testContext, `ERROR: ${message}`)
origLogError.call(testContext, message)
})
})
afterEach(`Remove stubs`, function() {
logger.info.restore()
logger.error.restore()
})
it('counts approved hours', async function() {
logger.info(`Approving timesheets...`)
...
Итак, перед каждым it()
я получаю ссылку на оригинальные функции logger.info()
и logger.error()
, а затем заглушаю их.Заглушка вызывает функцию, которая вызывает функцию mochawesome addContext()
, передавая ей ссылку на beforeEach()
и любую строку, которую я отправил logger.info()
.Затем вызывается оригинал.
Моя проблема в том, что каждый раз, когда вызывается addContext()
, он прикрепляет журналы к хуку beforeEach()
.Я тоже понимаю, почему это происходит.Пошаговое выполнение кода показывает, что при выполнении beforeEach()
, this
имеет два свойства: currentTest
и test
.Первый относится к it()
, который должен быть вызван, а второй - к самому beforeEach()
хуку.Это замечательно!Если бы оно оставалось таким, addContext()
взял бы currentTest
и приложил к нему логи ( ссылка на источник ).
К тому времени, когда вызывается аргумент callsFake()
однако тот же объект утратил свое свойство currentTest
, поэтому addContext()
вместо этого присоединяет журналы к самому хуку beforeEach()
.В результате получается отчет о тестировании со всеми журналами, прикрепленными к хуку beforeEach
вместо соответствующих тестов.
Можно ли как-то написать это, чтобы аргумент callsFake()
содержал ссылку на тест, который logger.info
был вызван с?Следующее работает, но требует дополнительного кода внутри каждого it()
:
boundLoggerInfo = logger.info.bind(this);
boundLoggerInfo(`Approving timesheets...`)
Ура!Надеюсь, я предоставил достаточно информации, не будучи слишком подробным ...