jest-generator
TypeScript icon, indicating that this package has built-in type declarations

1.0.7 • Public • Published

jest-generator

npm Build Status GitHub

Testing generators are verbose as they require calling next method of generator each time you want to iterate. jest-generator encapsulates all iteration and assertion logic itself. It provides easy and readable API for testing generator functions.

Testing with jest-generator

Installation

 
yarn add --dev jest-generator
 

or

 
npm install --save-dev jest-generator
 

Setup

Via setupTestFrameworkScriptFile config

Add jest-generator to your Jest setupTestFrameworkScriptFile configuration

"jest"{
  "setupTestFrameworkScriptFile": "jest-generator"
}

Via setupTest script

Require jest-generator from setupTest script

// ./setupTest.js
 
require('jest-generator');

Then add this config

"jest"{
  "setupTestFrameworkScriptFile": "./setupTest.js"
}

Usage

// ./pay.js
 
export default function* pay() {
  yield validatePayment();
  yield makePayment();
 
  return finishPayment();
}
// ./pay.test.js
 
import pay from './pay';
 
test('should work correctly', () => {
  const iterator = pay();
 
  expect(iterator).toMatchYields([
    [validatePayment()],
    [makePayment()],
    [finishPayment()]
  ]);
});
 

Usage with other libraries

Usage with Saga

// ./books.js
 
export function* loadBooks(params) {
  try {
    const response = yield call(api.loadBooks, params)
    
    yield put(booksLoadedSuccess(response))
  } catch (error) {
    yield put(booksLoadFail(error.message))
  }
}
// ./books.test.js
 
import { loadBooks } from './books';
 
test('should handle success response', () => {
  const params = { id: 201 };
  const iterator = loadBooks(params);
  const response = [];
 
  expect(iterator).toMatchYields([
    [call(api.loadBooks, params), response],
    [booksLoadedSuccess(response)],
  ]);
});
 
test('should handle error response', () => {
  const params = { id: 201 };
  const iterator = loadBooks(params);
  const response = new Error('failed to load books');
 
  expect(iterator).toMatchYields([
    [call(api.loadBooks, params), response],
    [put(booksLoadFail(response.message))],
  ]);
});
 

API

.toMatchYields(
  yieldValues: [
    [yieldValue: any, returnType?: any | Error]
  ]
)

Matches iterator against given yield values

expect(itetaor).toMatchYields([
  [callAPI()]
])

In order to return value from yield, simply pass your return value as second array value

function* gen() {
  const response = yield fetch()
  yield update(response)
}
 
const mockResponse = {};
const iterator = gen();
 
expect(iterator).toMatchYields([
  [fetch(), mockResponse],
  [update(mockResponse)]
])

In order to throw error from yield, you should simply pass Error instance to return type

function* gen() {
  const response = yield fetch()
  yield update(response)
}
 
const mockErrorResponse = new Error('network error');
const iterator = gen();
 
expect(iterator).toMatchYields([
  [fetch(), mockErrorResponse],
  [handleError(mockErrorResponse)]
])

Licence

This project is licensed under the MIT License - see the LICENSE file for details

Versions

Current Tags

  • Version
    Downloads (Last 7 Days)
    • Tag
  • 1.0.7
    2
    • latest

Version History

Package Sidebar

Install

npm i jest-generator

Weekly Downloads

2

Version

1.0.7

License

MIT

Unpacked Size

136 kB

Total Files

16

Last publish

Collaborators

  • doniyor2109