National Poo Museum

    vitest-sonar-reporter
    TypeScript icon, indicating that this package has built-in type declarations

    0.3.3 • Public • Published

    vitest-sonar-reporter

    Version Compatibility with vitest@latest

    Installation | Configuration | Examples | Troubleshooting


    SonarQube reporter for Vitest

    Generates Generic Execution reports from vitest tests for SonarQube to analyze.

    Installation

    vitest-sonar-reporter should be included in development dependencies. vitest is required as peer dependency.

    yarn add --dev vitest-sonar-reporter
    

    Configuration

    Add new custom reporter and define outputFile in your vite.config.ts:

    import { defineConfig } from 'vitest/config';
    
    export default defineConfig({
        test: {
            reporters: 'vitest-sonar-reporter',
            outputFile: 'sonar-report.xml',
        },
    });

    If you have multiple outputFile's defined, add one for vitest-sonar-reporter:

    test: {
        reporters: ['json', 'verbose', 'vitest-sonar-reporter'],
        outputFile: {
            json: 'my-json-report.json',
            'vitest-sonar-reporter': 'sonar-report.xml',
        },
    },

    Instruct SonarQube to pick report in your sonar-project.properties:

    sonar.testExecutionReportPaths=sonar-report.xml
    

    Examples

    import { describe, expect, test } from 'vitest';
    
    describe('animals', () => {
        test('dogs say woof', () => {
            const dog = { say: () => 'woof' };
            expect(dog.say()).toBe('woof');
        });
    
        test.todo('figure out what rabbits say', () => {
            const rabbit = { say: () => '????' };
            expect(rabbit.say()).toBe('?');
        });
    
        describe('flying ones', () => {
            test('cats can fly', () => {
                const cat = { fly: () => false };
                expect(cat.fly()).toBe(true);
            });
    
            test('birds can fly', () => {
                const bird = { fly: () => true };
                expect(bird.fly()).toBe(true);
            });
        });
    });
    <testExecutions version="1">
      <file path="test/animals.test.ts">
        <testCase name="animals - dogs say woof" duration="2" />
        <testCase name="animals - figure out what rabbits say" duration="0">
          <skipped message="figure out what rabbits say" />
        </testCase>
        <testCase name="animals - flying ones - cats can fly" duration="4">
          <failure message="expected false to be true // Object.is equality">
            <![CDATA[AssertionError: expected false to be true // Object.is equality
        at /workspaces/example/test/animals.test.ts:15:47
        at /workspaces/example/node_modules/vitest/dist/chunk-runtime-chain.7032872a.js:82:26
        at runTest (/workspaces/example/node_modules/vitest/dist/entry.js:771:40)
        at async runSuite (/workspaces/example/node_modules/vitest/dist/entry.js:836:13)
        at async runSuite (/workspaces/example/node_modules/vitest/dist/entry.js:836:13)
        at async runSuite (/workspaces/example/node_modules/vitest/dist/entry.js:836:13)
        at async runFiles (/workspaces/example/node_modules/vitest/dist/entry.js:873:5)
        at async startTests (/workspaces/example/node_modules/vitest/dist/entry.js:879:3)
        at async /workspaces/example/node_modules/vitest/dist/entry.js:906:7
        at async withEnv (/workspaces/example/node_modules/vitest/dist/entry.js:503:5)]]>
          </failure>
        </testCase>
        <testCase name="animals - flying ones - birds can fly" duration="5" />
      </file>
    </testExecutions>

    Troubleshooting

    1. I'm seeing Error [ERR_REQUIRE_ESM]: require() of ES Module when importing the module. I cannot add "type": "module" to my package.json.

    This package is published as pure ESM package. It can still be used in commonjs projects by using dynamic import. See Vite | Async Config for Vite's configuration options.

    // vite.config.ts
    export default defineConfig(async function () {
        const { default: SonarReporter } = await import('vitest-sonar-reporter');
    
        return {
            test: {
                reporters: new SonarReporter(),
                outputFile: 'sonar-report.xml',
            },
        };
    });

    Install

    npm i vitest-sonar-reporter

    DownloadsWeekly Downloads

    5,438

    Version

    0.3.3

    License

    MIT

    Unpacked Size

    16 kB

    Total Files

    11

    Last publish

    Collaborators

    • ariperkkio