Git Product home page Git Product logo

agent-js-vitest's Introduction

@reportportal/agent-js-vitest

Agent to integrate Vitest with ReportPortal.

Installation

Install the agent in your project:

npm install --save-dev @reportportal/agent-js-vitest

Configuration

1. Create vitest.config.ts file with ReportPortal configuration:

  import { defineConfig } from 'vitest/config';
  import RPReporter from '@reportportal/agent-js-vitest'; // or import { RPReporter } from '@reportportal/agent-js-vitest';

  const rpConfig = {
    apiKey: '00000000-0000-0000-0000-000000000000',
    endpoint: 'https://your.reportportal.server/api/v2',
    project: 'Your ReportPortal project name',
    launch: 'Your launch name',
    attributes: [
      {
        key: 'key',
        value: 'value',
      },
      {
        value: 'value',
      },
    ],
    description: 'Your launch description',
  };

  export default defineConfig({
    test: {
      // add setup file to be able to use ReportingApi via `this.ReportingApi` in your tests
      setupFiles: ["@reportportal/agent-js-vitest/setup"],
      reporters: ['default', new RPReporter(rpConfig)],
    },
  });

The full list of available options presented below.

Option Necessity Default Description
apiKey Required User's ReportPortal token from which you want to send requests. It can be found on the profile page of this user.
endpoint Required URL of your server. For example 'https://server:8080/api/v2'.
launch Required Name of launch at creation.
project Required The name of the project in which the launches will be created.
attributes Optional [] Launch attributes.
description Optional '' Launch description.
rerun Optional false Enable rerun
rerunOf Optional Not set UUID of launch you want to rerun. If not specified, ReportPortal will update the latest launch with the same name
mode Optional 'DEFAULT' Results will be submitted to Launches page
'DEBUG' - Results will be submitted to Debug page.
debug Optional false This flag allows seeing the logs of the client-javascript. Useful for debugging.
launchId Optional Not set The ID of an already existing launch. The launch must be in 'IN_PROGRESS' status while the tests are running. Please note that if this ID is provided, the launch will not be finished at the end of the run and must be finished separately.
restClientConfig Optional Not set axios like http client config. May contain agent property for configure http(s) client, and other client options e.g. proxy, timeout. For debugging and displaying logs the debug: true option can be used.
Visit client-javascript for more details.
headers Optional {} The object with custom headers for internal http client.
launchUuidPrint Optional false Whether to print the current launch UUID.
launchUuidPrintOutput Optional 'STDOUT' Launch UUID printing output. Possible values: 'STDOUT', 'STDERR', 'FILE', 'ENVIRONMENT'. Works only if launchUuidPrint set to true. File format: rp-launch-uuid-${launch_uuid}.tmp. Env variable: RP_LAUNCH_UUID, note that the env variable is only available in the reporter process (it cannot be obtained from tests).
extendTestDescriptionWithLastError Optional true If set to true the latest error log will be attached to the test case description.

The following options can be overridden using ENVIRONMENT variables:

Option ENV variable
launchId RP_LAUNCH_ID

2. Add script to package.json file:

{
  "scripts": {
    "test": "vitest run"
  }
}

Reporting

When organizing tests, specify titles for describe blocks, as this is necessary to build the correct structure of reports.

Logging

You can use the following console native methods to report logs to the tests:

console.log();
console.info();
console.debug();
console.warn();
console.error();

console's log, info,dubug reports as info log.

console's error, warn reports as error log if message contains error mention, otherwise as warn log.

Reporting API

This reporter provides Reporting API to use it directly in tests to send some additional data to the report.

To start using the ReportingApi in tests, you can:

  • Add setup file in vitest.config.ts

      import { defineConfig } from 'vitest/config';
    
      export default defineConfig({
        test: {
          ...
          setupFiles: ["@reportportal/agent-js-vitest/setup"],
        },
      });

    ReportingApi will be available in global variables and supports receiving Vitest task from the setup file.

        test('should contain logs with attachments',() => {
          ...
          ReportingApi.attachment({ name, type, content }, 'Description');
          ...
        });
  • Import ReportingApi directly from '@reportportal/agent-js-vitest':

    import { ReportingApi } from '@reportportal/agent-js-vitest';

    In this case you are required to pass Vitest task as the first argument to the ReportingApi methods.

        test('should contain logs with attachments',({ task }) => {
          ...
          ReportingApi.attachment(task, { name, type, content }, 'Description');
          ...
        });

Reporting API methods

The API provides methods for attaching data.

attachment

Send file to ReportPortal for the current test. Should be called inside of corresponding test.
ReportingApi.attachment(task: vitest.Task, data: Attachment, description?: string);
required: task, data
optional: description
where Attachment type is {name: string; type: string; content: string | Buffer;}
Example:

test('should contain logs with attachments',({ task }) => {
  const fileName = 'test.jpg';
  const fileContent = fs.readFileSync(path.resolve(__dirname, './attachments', fileName));

  ReportingApi.attachment(task, {
    name: fileName,
    type: 'image/png',
    content: fileContent.toString('base64'),
  }, 'Description');

  expect(true).toBe(true);
});
testCaseId

Add testCaseId to ReportPortal for the current test. Should be called inside of corresponding test.
ReportingApi.testCaseId(task: vitest.Task, data: string);
required: task, data
Example:

test('should contain testCaseId',({ task }) => {
  ReportingApi.testCaseId(task, 'C123456');

  expect(true).toBe(true);
});
description

Add description to ReportPortal for the current test. In case the user call the method more than one time, the existing description will be extended. Should be called inside of corresponding test.
ReportingApi.description(task: vitest.Task, data: string);
required: task, data
Example:

test('should contain description',({ task }) => {
  ReportingApi.description(task, 'Test Description');

  expect(true).toBe(true);
});
attributes

Send file to ReportPortal for the current test. Should be called inside of corresponding test.
ReportingApi.attributes(task: vitest.Task, data: Attribute[]);
required: task, data
where Attribute type is { value: string; key?: string; system?: boolean; }
Example:

test('should contain attributes',({ task }) => {
  ReportingApi.attributes(task,
    [
      { key: 'attrKey1', value: 'attrValue1'},
      { value: 'attrValue2'}
    ]);

  expect(true).toBe(true);
});

agent-js-vitest's People

Contributors

aliakseiliasnitski avatar amsterget avatar artsiombandarenka avatar

Watchers

 avatar  avatar

agent-js-vitest's Issues

Reportportal doesnt work than adding coverage

Than I run vitest run --coverage --reporter=verbose --reporter=junit --outputFile.junit=junit.xml than I couldn't see anything in reportportal. If I just run vitest run its all good.
default config, just with coverage

      include: ['**/*.test.{ts,tsx}'],
      reporters: ['default', new RPReporter(reportPortalConfig)],
      environment: 'jsdom',
      globals: true,
      setupFiles: ['./config/testSetup.ts', "@reportportal/agent-js-vitest/setup"],
      deps: {
        optimizer: {
          web: {
            include: ['vitest-canvas-mock'],
          },
        },
      },
      coverage: {
        // include all files but exclude configs
        all: true,
        provider: 'v8',
        reporter: ['text-summary', 'cobertura', 'lcov', 'html'],
      },

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.