Get the current test/spec name in Jest

前端 未结 3 583
耶瑟儿~
耶瑟儿~ 2021-01-18 08:19

Is there a way to get the current spec name from within the running test?

Basically I want to save a file, eg. using a function saveFile(), with the nam

相关标签:
3条回答
  • 2021-01-18 08:53

    This worked for me

    console.log(expect.getState().currentTestName);
    
    0 讨论(0)
  • 2021-01-18 08:56

    I found that the only possible way was through the use of expect(), which contains the spec name in its this. doing something like

    expect.extend({
      async toSaveFile(data) {
        fs.writeFileSync(`${this.currentTestName}.txt`, data)
        return { pass: true };
      },
    });
    

    allows to then do

    expect().toSaveFile('contents of the file');
    

    it's definitely a hack, but it's the only way I could find to get a reference to the spec name. there is also this.testPath that indicates the test file

    0 讨论(0)
  • 2021-01-18 08:59

    Not sure how @Giacomo concluded that was "the only possible" way :) since there's this alternative mentioned in this GitHub issue, which makes the test name accessible directly in the test via jasmine['currentTest'].fullName, no extend needed.

    jest.config.js:

    module.exports = {
        setupFilesAfterEnv: ['./jest.setup.js'],
        
        .................
    };
    

    jest.setup.js:

    // Patch tests to include their own name
    jasmine.getEnv().addReporter({
        specStarted: result => jasmine.currentTest = result,
        specDone: result => jasmine.currentTest = result,
    });
    

    Then, in your *.test.js files...

    describe('Test description', () => {
        beforeEach(() => console.log('Before test', jasmine['currentTest'].fullName));
    
        test(...);
    });
    
    0 讨论(0)
提交回复
热议问题