1.1.0 • Published 6 years ago

method-mocks v1.1.0

Weekly downloads
2
License
MIT
Repository
github
Last release
6 years ago

method-mocks

Build Status codecov Follow on Twitter

Works with existing mocking and testing frameworks (e.g. Jest) to make method mocking easier.

Example (testing a React Native API):

// App.js

import { Alert } from 'react-native'

export const alertUser = msg => Alert.alert(msg)
// App.test.js

import { alertUser } from './App'

// This will get hoisted to the top at runtime by Jest
jest.mock('react-native', () => ({
  Alert: require('method-mocks').setupMethodMocks({
    SOME_KEY: 1
  })
}))

describe('.alertUser()', () => {
  let mock

  beforeEach(() => {
    /* Even though we're mocking an external module we're able to set the
    mock for a given method on each iteration */
    mock = Alert.setMethodMock('alert', jest.fn())
  })

  afterEach(() => {
    /* clean-up! */
    Alert.clearAllMethodMocks()
  })

  it('calls through to native alert', () => {
    alertUser('test')

    expect(mock).toHaveBeenCalledWith('test')
  })
})

Installation

npm i method-mocks

API/Usage

setupMethodMocks(obj)

This will add the following methods to the passed-in object:

{
  /**
   * Create a method of the given name and set it to be the given mock function.
   *
   * If method already exists then it's existing value will be saved prior to
   * being overwritten with the given mock.
   *
   * @param {String} methodName The name of the method to mock.
   * @param {Function} mockFn The mock function.
   *
   * @return the mock function
   */
  setMethodMock: (methodName, mockFn),

  /**
   * Remove mocked method of the given name.
   *
   * If the method had already existed prior to getting mocked then this
   * original implementation will be restored, else the method will be deleted.
   *
   * @param {String} methodName The name of the method.
   */
  clearMethodMock: (methodName),

  /**
   * Remove all mocked methods.
   *
   * This is equivalent to calling `clearMethodMock()` for each mocked method,
   * one-by-one.
   */
  clearAllMethodMocks: ()
}

The return value will be the original object itself.

Development

  • Lint: yarn lint
  • Test: yarn test
  • Build: yarn build

Contributors

All contributions welcome. Please see CONTRIBUTING.md

License

MIT