ink-testing-library
Version:
Utilities for testing Ink apps
154 lines (92 loc) • 2.46 kB
Markdown
# ink-testing-library 
> Utilities for testing [Ink](https://github.com/vadimdemedes/ink) apps
## Install
```
$ npm install --save-dev ink-testing-library
```
## Usage
```jsx
import React from 'react';
import {Text} from 'ink';
import {render} from 'ink-testing-library';
const Counter = ({count}) => <Text>Count: {count}</Text>;
const {lastFrame, rerender} = render(<Counter count={0}/>);
lastFrame() === 'Count: 0'; //=> true
rerender(<Counter count={1}/>);
lastFrame() === 'Count: 1'; //=> true
```
## API
### render(tree)
#### tree
Type: `ReactElement`
React component to render.
```jsx
render(<MyApp/>);
```
This function returns an object, which contains the following methods and properties.
#### lastFrame()
Type: `function`
Shortcut to [`stdout.lastFrame`](#lastframe-1).
#### frames
Type: `array`
Shortcut to [`stdout.frames`](#frames-1).
#### rerender(tree)
Type: `function`
##### tree
Type: `ReactElement`
Rerender root component with different props or replace with another component.
```jsx
const {rerender} = render(<OldApp/>);
rerender(<NewApp/>);
```
#### unmount()
Type: `function`
Unmount current component.
```jsx
const {unmount} = render(<Test/>);
unmount();
```
#### stdin
Type: `object`
##### write()
Type: `function`
Write data to current component's stdin stream.
```jsx
import {useInput, Text} from 'ink';
const Test = () => {
useInput(input => {
console.log(input);
//=> 'hello'
});
return …;
};
const {stdin} = render(<Test/>);
stdin.write('hello');
```
#### stdout
Type: `object`
##### lastFrame()
Type: `function`
Return the last rendered frame (output) from stdout stream.
```jsx
const Test = () => <Text>Hello</Text>;
const {stdout} = render(<Test/>);
stdout.lastFrame(); //=> 'Hello'
```
##### frames
Type: `array`
Array of all rendered frames, where the last frame is also the last item in that array.
```jsx
const Counter = ({count}) => <Text>Count: {count}</Text>;
const {stdout, rerender} = render(<Counter count={0}/>);
rerender(<Counter count={1}/>);
console.log(stdout.frames); //=> ['Count: 0', 'Count: 1']
```
#### stderr
Type: `object`
##### lastFrame()
Type: `function`
Same as [`lastFrame`](#lastframe-1) in [`stdout`](#stdout), but for stderr stream.
##### frames
Type: `array`
Same as [`frames`](#frames-1) in [`stdout`](#stdout), but for stderr stream.