Czy istnieje sposób uzyskania nazwy aktualnie bieżącego testu?

Niektóre (mocno uproszczony) kod może pomóc wyjaśnić. Chcę uniknąć powielania "test1" / "test2" w połączeniach do performTest:

describe("some bogus tests", function () {

    function performTest(uniqueName, speed) {
        var result = functionUnderTest(uniqueName, speed);
        expect(result).toBeTruthy();
    }

    it("test1", function () {
        performTest("test1", "fast");
    });

    it("test2", function () {
        performTest("test2", "slow");
    });
});

aktualizacja Widzę, że potrzebuję informacji:

jasmine.currentEnv_.currentSpec.description

Lub prawdopodobnie lepiej:

jasmine.getEnv().currentSpec.description
24
GarethOwen 5 październik 2012, 12:50

3 odpowiedzi

Najlepsza odpowiedź
jasmine.getEnv().currentSpec.description
14
GarethOwen 10 październik 2012, 07:47

Nie jest ładna (wprowadza zmienną globalną), ale możesz to zrobić za pomocą niestandardowego reportera:

// current-spec-reporter.js

global.currentSpec = null;

class CurrentSpecReporter {

  specStarted(spec) {
    global.currentSpec = spec;
  }

  specDone() {
    global.currentSpec = null;
  }

}

module.exports = CurrentSpecReporter;

Dodaj go do jaśminu, gdy dodasz innych reporterów ...

const CurrentSpecReporter = require('./current-spec-reporter.js');
// ...
jasmine.getEnv().addReporter(new CurrentSpecReporter());

Następnie wyodrębnij nazwę testu podczas testu / konfiguracji w razie potrzeby ...

  it('Should have an accessible description', () => {
    expect(global.currentSpec.description).toBe('Should have an accessible description');
  }

8
Pace 6 marzec 2019, 01:28

Dla każdego, kto próbuje to zrobić w Jasmine 2: Możesz przedstawić subtelną zmianę do deklaracji, jednak to naprawiają. Zamiast się robić:

it("name for it", function() {});

Zdefiniuj it jako zmienną:

var spec = it("name for it", function() {
   console.log(spec.description); // prints "name for it"
});

Wymaga to wtyczek i działa ze standardowym jaśminem.

5
Ian 17 wrzesień 2015, 08:45