Bill
Bill

Reputation: 3209

Jasmine Testing get the name of the full describes/it's

I was wondering, is it possible to get the full nested describe path for the tests?

Given:

describe('Smoke Testing - Ensuring all pages are rendering correctly and free of JS errors', function () {
  describe('app', function () {
    describe('app.home', function () {
      it('should render this page correctly', function (done) {
        //name here should be: Smoke Testing - Ensuring all pages are rendering correctly and free of JS errors app app.home should render this page correctly
        done()
      })
    })

    describe('app.dashboard', function () {
      describe('app.dashboard.foobar', function () {
        it('should render this page correctly', function (done) {
        //name here should be: Smoke Testing - Ensuring all pages are rendering correctly and free of JS errors app app.dashboard app.dashboard.foobar should render this page correctly    
          done()
        })
      })
    })

  })

})

Upvotes: 3

Views: 4009

Answers (2)

Tadas Sasnauskas
Tadas Sasnauskas

Reputation: 2313

Both jasmine.Suite and jasmine.Spec have method getFullName(). Works as you'd expect:

describe("A spec within suite", function() {
  it("has a full name", function() {
    expect(this.getFullName()).toBe('A spec within suite has a full name.');    
  });
  
  it("also knows parent suite name", function() {
    expect(this.suite.getFullName()).toBe('A spec within suite');    
  });
});
<script src="http://searls.github.io/jasmine-all/jasmine-all-min.js"></script>

Notice: this answer is now bit dated and uses Jasmine 1.3.1 in the example.

Upvotes: 5

josh.bradley
josh.bradley

Reputation: 79

When you are inside the describe callback function this is set to a "suite" object which has the description of the suite (the text you pass to describe) and a property for the parent suite.

The example below gets the concatenation of the description nested describe calls, I'm not sure about how to access the description of the "it". But this will get you part way there.

var getFullDesc = function(suite){
    var desc = "";
    while(suite.parentSuite){
        desc = suite.description + " " + desc;
        suite = suite.parentSuite;
    }

    return desc;
}

describe('Outer describe', function(){
   describe('Inner describe', function(){
        console.log(getFullDesc(this));
       it('some test', function(){

       });
    });
});

Upvotes: -1

Related Questions