Как получить текущее тестовое имя в тесте Mocha?

Для дополнительного ведения журнала мне нужно иметь возможность распечатать текущее описание теста.

Как я могу это сделать (с Mocha BDD)?

Ответ 1

Здесь вы идете:

console.log(this.title);

Ответ 2

Если вы находитесь непосредственно внутри обратного вызова describe, вы можете использовать this.title для заголовка describe или this.fullTitle(), чтобы получить иерархическое название describe (названия предков + заголовок из этого). Если вы находитесь в обратном вызове it, вы можете использовать this.test.title или this.test.fullTitle() соответственно. Итак:

describe("top", function() {
    console.log(this.title);
    console.log(this.fullTitle());

    it("test", function () {
        console.log(this.test.title);
        console.log(this.test.fullTitle());
    });
});

Выводные выражения console.log будут выводить:

top
top
test
top test

Вот более полный пример, показывающий, как названия изменяются в зависимости от вложенности:

function dump () {
    console.log("running: (fullTitle)", this.test.fullTitle(), "(title)",
                this.test.title);
}

function directDump() {
    console.log("running (direct): (fullTitle)", this.fullTitle(), "(title)",
                this.title);
}

describe("top", function () {
    directDump.call(this);
    it("test 1", dump);
    it("test 2", dump);
    describe("level 1", function () {
        directDump.call(this);
        it("test 1", dump);
        it("test 2", dump);
    });
});

Операторы console.log выводят:

running (direct): (fullTitle) top (title) top
running (direct): (fullTitle) top level 1 (title) level 1
running: (fullTitle) top test 1 (title) test 1
running: (fullTitle) top test 2 (title) test 2
running: (fullTitle) top level 1 test 1 (title) test 1
running: (fullTitle) top level 1 test 2 (title) test 2

Ответ 3

Внутри beforeEach попробуйте this.currentTest.title.

Пример:

beforeEach(function(){
  console.log(this.currentTest.title); 
})

Использование Mocha 3.4.1.

Ответ 4

Для мокко "^ 5.1.0" вы можете использовать console.log(this.ctx.test.title);

Ответ 5

Внутри любого метода тестирования

it('test method name'), function()  { var testName= this.test.title; }

и вы можете использовать:

afterEach(function(){
    console.log(this.currentTest.title); //displays test title for each test method      
});