Jasmine: How to get name of current test

For anyone attempting to do this in Jasmine 2: You can introduce a subtle change to your declarations however that fix it. Instead of just doing:

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

Define the it as a variable:

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

This requires no plug-ins and works with standard Jasmine.


It's not pretty (introduces a global variable) but you can do it with a custom reporter:

// current-spec-reporter.js

global.currentSpec = null;

class CurrentSpecReporter {

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

  specDone() {
    global.currentSpec = null;
  }

}

module.exports = CurrentSpecReporter;

Add it to jasmine when you add your other reporters...

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

Then extract the test name during your test/setup as needed...

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

At last, see a sample of currentSpec structure:

{
  "id":"spec15",
  "description":"test1",
  "fullName":"My test category test1",
  "failedExpectations":[],
  "passedExpectations":[],
  "deprecationWarnings":[],
  "pendingReason":"",
  "duration":null,
  "properties":null
}

jasmine.getEnv().currentSpec.description