Skip to content

Easily unit test LaunchDarkly feature flagged components with jest

License

Notifications You must be signed in to change notification settings

falegh/jest-launchdarkly-mock

 
 

Repository files navigation

jest-launchdarkly-mock

npm version npm downloads License PRs Welcome

Star on GitHub Tweet

Installation

yarn -D jest-launchdarkly-mock

or

npm install jest-launchdarkly-mock --save-dev

Then in jest.config.js add jest-launchdarkly-mock to setupFiles:

// jest.config.js
module.exports = {
  setupFiles: ['jest-launchdarkly-mock'],
}

Usage

Use the only 3 apis for test cases:

  • mockFlags(flags: LDFlagSet): mock flags at the start of each test case.

  • ldClientMock: a jest mock of the ldClient. All methods of this object are jest mocks.

  • resetLDMocks : resets both mockFlags and ldClientMock.

Example

import { mockFlags, ldClientMock, resetLDMocks } from 'jest-launchdarkly-mock'

describe('button', () => {
  beforeEach(() => {
    // reset before each test case
    resetLDMocks()
  })

  test('flag on', () => {
      // arrange: You can use kebab-case or camelCase keys
      mockFlags({ devTestFlag: true })
  
      // act
      const { getByTestId } = render(<Button />)

      // assert
      expect(getByTestId('test-button')).toBeTruthy()
    })

  test('identify', () => {
    // arrange
    mockFlags({ 'dev-test-flag': true })
    
    // act
    const { getByTestId } = render(<Button />)
    fireEvent.click(getByTestId('test-button'))

    // assert: identify gets called
    expect(ldClientMock.identify).toBeCalledWith({ key: 'aa0ceb' })
  })
})

About

Easily unit test LaunchDarkly feature flagged components with jest

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • TypeScript 70.7%
  • JavaScript 29.3%