labd / commercetools-node-mock

Mock for the commercetools rest api
MIT License
19 stars 14 forks source link
commercetools testing

Commercetools Mocking library for Node

codecov

This library mocks the Commercetools rest API to ease testing of your typescript codebases interacting with the commercetools api. It uses the same proven approach as our testing module in the commercetools Python SDK.

Since version 2 of this library it is based on msw instead of nock. It is now therefore als recommended to manage the msw server yourself and use the registerHandlers method to register the handlers on this server.

This allows you to use the same server for mocking other API's as well.

Installation

yarn add --dev @labdigital/commercetools-mock

Docker image

This codebase is also available as a docker image where it provides a runnable http server exposing the mocked endpoints. See https://hub.docker.com/r/labdigital/commercetools-mock-server

Example

import { CommercetoolsMock, getBaseResourceProperties } from '@labdigital/commercetools-mock'
import { setupServer } from 'msw/node'

const ctMock = new CommercetoolsMock({
  apiHost: 'https://localhost',
  authHost: 'https://localhost',
  enableAuthentication: false,
  validateCredentials: false,
  defaultProjectKey: 'my-project',
  silent: true,
})

describe('A module', () => {
  const mswServer = setupServer()

  beforeAll(() => {
    mswServer.listen({ onUnhandledRequest: "error" })
  })

  beforeEach(() => {
    ctMock.registerHandlers(mswServer)

    ctMock.project().add('type', {
      ...getBaseResourceProperties()
      key: 'my-customt-type',
      fieldDefinitions: [],
    })
  })

  afterAll(() => {
    mswServer.close()
  })

  afterEach(() => {
    server.clearHandlers()
    ctMock.clear()
  })

  test('my function', async () => {
    ctMock.project().add('customer', customerFixture)

    const res = await myFunction()

    expect(res).toEqual(true)
  })
})

Contributing

This codebases use @changesets for release and version management

Adding a new service {#adding-a-service}

Implement the following: