react-native-testing-library
Advanced tools
Comparing version 1.11.1 to 1.12.0
@@ -1,1 +0,1 @@ | ||
var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"act",{enumerable:true,get:function get(){return _act.default;}});Object.defineProperty(exports,"render",{enumerable:true,get:function get(){return _render.default;}});Object.defineProperty(exports,"shallow",{enumerable:true,get:function get(){return _shallow.default;}});Object.defineProperty(exports,"flushMicrotasksQueue",{enumerable:true,get:function get(){return _flushMicrotasksQueue.default;}});Object.defineProperty(exports,"debug",{enumerable:true,get:function get(){return _debug.default;}});Object.defineProperty(exports,"fireEvent",{enumerable:true,get:function get(){return _fireEvent.default;}});Object.defineProperty(exports,"waitForElement",{enumerable:true,get:function get(){return _waitForElement.default;}});var _act=_interopRequireDefault(require("./act"));var _render=_interopRequireDefault(require("./render"));var _shallow=_interopRequireDefault(require("./shallow"));var _flushMicrotasksQueue=_interopRequireDefault(require("./flushMicrotasksQueue"));var _debug=_interopRequireDefault(require("./debug"));var _fireEvent=_interopRequireDefault(require("./fireEvent"));var _waitForElement=_interopRequireDefault(require("./waitForElement")); | ||
var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"act",{enumerable:true,get:function get(){return _act.default;}});Object.defineProperty(exports,"cleanup",{enumerable:true,get:function get(){return _cleanup.default;}});Object.defineProperty(exports,"debug",{enumerable:true,get:function get(){return _debug.default;}});Object.defineProperty(exports,"fireEvent",{enumerable:true,get:function get(){return _fireEvent.default;}});Object.defineProperty(exports,"flushMicrotasksQueue",{enumerable:true,get:function get(){return _flushMicrotasksQueue.default;}});Object.defineProperty(exports,"render",{enumerable:true,get:function get(){return _render.default;}});Object.defineProperty(exports,"shallow",{enumerable:true,get:function get(){return _shallow.default;}});Object.defineProperty(exports,"waitForElement",{enumerable:true,get:function get(){return _waitForElement.default;}});var _act=_interopRequireDefault(require("./act"));var _cleanup=_interopRequireDefault(require("./cleanup"));var _debug=_interopRequireDefault(require("./debug"));var _fireEvent=_interopRequireDefault(require("./fireEvent"));var _flushMicrotasksQueue=_interopRequireDefault(require("./flushMicrotasksQueue"));var _render=_interopRequireDefault(require("./render"));var _shallow=_interopRequireDefault(require("./shallow"));var _waitForElement=_interopRequireDefault(require("./waitForElement")); |
@@ -1,1 +0,1 @@ | ||
var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");var _interopRequireWildcard=require("@babel/runtime/helpers/interopRequireWildcard");Object.defineProperty(exports,"__esModule",{value:true});exports.default=render;var _objectSpread2=_interopRequireDefault(require("@babel/runtime/helpers/objectSpread"));var React=_interopRequireWildcard(require("react"));var _reactTestRenderer=_interopRequireDefault(require("react-test-renderer"));var _act=_interopRequireDefault(require("./act"));var _getByAPI=require("./helpers/getByAPI");var _queryByAPI=require("./helpers/queryByAPI");var _a11yAPI=_interopRequireDefault(require("./helpers/a11yAPI"));var _debugShallow=_interopRequireDefault(require("./helpers/debugShallow"));var _debugDeep=_interopRequireDefault(require("./helpers/debugDeep"));var _jsxFileName="/Users/thymikee/Projects/callstack/react-native-testing-library/src/render.js";function render(component){var _ref=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{},Wrapper=_ref.wrapper,createNodeMock=_ref.createNodeMock;var wrap=function wrap(innerElement){return Wrapper?React.createElement(Wrapper,{__source:{fileName:_jsxFileName,lineNumber:28}},innerElement):innerElement;};var renderer=renderWithAct(wrap(component),createNodeMock?{createNodeMock:createNodeMock}:undefined);var update=updateWithAct(renderer,wrap);var instance=renderer.root;return(0,_objectSpread2.default)({},(0,_getByAPI.getByAPI)(instance),(0,_queryByAPI.queryByAPI)(instance),(0,_a11yAPI.default)(instance),{update:update,rerender:update,unmount:renderer.unmount,toJSON:renderer.toJSON,debug:debug(instance,renderer)});}function renderWithAct(component,options){var renderer;(0,_act.default)(function(){renderer=_reactTestRenderer.default.create(component,options);});return renderer;}function updateWithAct(renderer,wrap){return function(component){(0,_act.default)(function(){renderer.update(wrap(component));});};}function debug(instance,renderer){function debugImpl(message){return(0,_debugDeep.default)(renderer.toJSON(),message);}debugImpl.shallow=function(message){return(0,_debugShallow.default)(instance,message);};return debugImpl;} | ||
var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");var _interopRequireWildcard=require("@babel/runtime/helpers/interopRequireWildcard");Object.defineProperty(exports,"__esModule",{value:true});exports.default=render;var _objectSpread2=_interopRequireDefault(require("@babel/runtime/helpers/objectSpread"));var React=_interopRequireWildcard(require("react"));var _reactTestRenderer=_interopRequireDefault(require("react-test-renderer"));var _act=_interopRequireDefault(require("./act"));var _cleanup=require("./cleanup");var _getByAPI=require("./helpers/getByAPI");var _queryByAPI=require("./helpers/queryByAPI");var _a11yAPI=_interopRequireDefault(require("./helpers/a11yAPI"));var _debugShallow=_interopRequireDefault(require("./helpers/debugShallow"));var _debugDeep=_interopRequireDefault(require("./helpers/debugDeep"));var _jsxFileName="/Users/thymikee/Projects/callstack/react-native-testing-library/src/render.js";function render(component){var _ref=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{},Wrapper=_ref.wrapper,createNodeMock=_ref.createNodeMock;var wrap=function wrap(innerElement){return Wrapper?React.createElement(Wrapper,{__source:{fileName:_jsxFileName,lineNumber:29}},innerElement):innerElement;};var renderer=renderWithAct(wrap(component),createNodeMock?{createNodeMock:createNodeMock}:undefined);var update=updateWithAct(renderer,wrap);var instance=renderer.root;(0,_cleanup.addToCleanupQueue)(renderer.unmount);return(0,_objectSpread2.default)({},(0,_getByAPI.getByAPI)(instance),(0,_queryByAPI.queryByAPI)(instance),(0,_a11yAPI.default)(instance),{update:update,rerender:update,unmount:renderer.unmount,toJSON:renderer.toJSON,debug:debug(instance,renderer)});}function renderWithAct(component,options){var renderer;(0,_act.default)(function(){renderer=_reactTestRenderer.default.create(component,options);});return renderer;}function updateWithAct(renderer,wrap){return function(component){(0,_act.default)(function(){renderer.update(wrap(component));});};}function debug(instance,renderer){function debugImpl(message){return(0,_debugDeep.default)(renderer.toJSON(),message);}debugImpl.shallow=function(message){return(0,_debugShallow.default)(instance,message);};return debugImpl;} |
@@ -1,1 +0,1 @@ | ||
Object.defineProperty(exports,"__esModule",{value:true});exports.default=waitForExpect;function waitForExpect(expectation){var timeout=arguments.length>1&&arguments[1]!==undefined?arguments[1]:4500;var interval=arguments.length>2&&arguments[2]!==undefined?arguments[2]:50;var startTime=Date.now();return new Promise(function(resolve,reject){var rejectOrRerun=function rejectOrRerun(error){if(Date.now()-startTime>=timeout){reject(error);return;}setTimeout(runExpectation,interval);};function runExpectation(){try{var result=expectation();resolve(result);}catch(error){rejectOrRerun(error);}}setTimeout(runExpectation,0);});} | ||
Object.defineProperty(exports,"__esModule",{value:true});exports.default=waitForElement;function waitForElement(expectation){var timeout=arguments.length>1&&arguments[1]!==undefined?arguments[1]:4500;var interval=arguments.length>2&&arguments[2]!==undefined?arguments[2]:50;var startTime=Date.now();return new Promise(function(resolve,reject){var rejectOrRerun=function rejectOrRerun(error){if(Date.now()-startTime>=timeout){reject(error);return;}setTimeout(runExpectation,interval);};function runExpectation(){try{var result=expectation();resolve(result);}catch(error){rejectOrRerun(error);}}setTimeout(runExpectation,0);});} |
@@ -118,2 +118,41 @@ --- | ||
## `cleanup` | ||
```ts | ||
const cleanup: () => void | ||
``` | ||
Unmounts React trees that were mounted with `render`. | ||
For example, if you're using the `jest` testing framework, then you would need to use the `afterEach` hook like so: | ||
```jsx | ||
import { cleanup, render } from 'react-native-testing-library' | ||
import { View } from 'react-native' | ||
afterEach(cleanup) | ||
it('renders a view', () => { | ||
render(<View />) | ||
// ... | ||
}) | ||
``` | ||
The `afterEach(cleanup)` call also works in `describe` blocks: | ||
```jsx | ||
describe('when logged in', () => { | ||
afterEach(cleanup) | ||
it('renders the user', () => { | ||
render(<SiteHeader />) | ||
// ... | ||
}); | ||
}) | ||
``` | ||
Failing to call `cleanup` when you've called `render` could result in a memory leak and tests which are not "idempotent" (which can lead to difficult to debug errors in your tests). | ||
The alternative to `cleanup` is balancing every `render` with an `unmount` method call. | ||
## `fireEvent` | ||
@@ -215,4 +254,6 @@ | ||
#### On a `ScrollView` | ||
```jsx | ||
import { ScrollView, TextInput } from 'react-native'; | ||
import { ScrollView, Text } from 'react-native'; | ||
import { render, fireEvent } from 'react-native-testing-library'; | ||
@@ -238,2 +279,39 @@ | ||
#### On a `FlatList` | ||
```jsx | ||
import { FlatList, View } from 'react-native'; | ||
import { render, fireEvent } from 'react-native-testing-library'; | ||
const onEndReached = jest.fn(); | ||
const { getByType } = render( | ||
<FlatList | ||
data={Array.from({ length: 10 }, (_, key) => ({ key: `${key}` }))} | ||
renderItem={() => <View style={{ height: 500, width: 100 }} />} | ||
onEndReached={onEndReached} | ||
onEndReachedThreshold={0.2} | ||
/> | ||
); | ||
const eventData = { | ||
nativeEvent: { | ||
contentOffset: { | ||
y: 500, | ||
}, | ||
contentSize: { | ||
// Dimensions of the scrollable content | ||
height: 500, | ||
width: 100, | ||
}, | ||
layoutMeasurement: { | ||
// Dimensions of the device | ||
height: 100, | ||
width: 100, | ||
}, | ||
}, | ||
}; | ||
fireEvent.scroll(getByType(ScrollView), eventData); | ||
expect(onEndReached).toHaveBeenCalled(); | ||
``` | ||
## `waitForElement` | ||
@@ -246,3 +324,3 @@ | ||
```jsx | ||
function waitForExpect<T: *>( | ||
function waitForElement<T>( | ||
expectation: () => T, | ||
@@ -254,3 +332,3 @@ timeout: number = 4500, | ||
Waits for non-deterministic periods of time until your element appears or times out. `waitForExpect` periodically calls `expectation` every `interval` milliseconds to determine whether the element appeared or not. | ||
Waits for non-deterministic periods of time until your element appears or times out. `waitForElement` periodically calls `expectation` every `interval` milliseconds to determine whether the element appeared or not. | ||
@@ -257,0 +335,0 @@ ```jsx |
{ | ||
"name": "react-native-testing-library", | ||
"version": "1.11.1", | ||
"version": "1.12.0", | ||
"description": "Simple React Native testing utilities helping you write better tests with less effort", | ||
@@ -20,13 +20,11 @@ "main": "build/index.js", | ||
"@babel/core": "^7.1.2", | ||
"@callstack/eslint-config": "^6.0.0", | ||
"@callstack/eslint-config": "^8.0.0", | ||
"@release-it/conventional-changelog": "^1.1.0", | ||
"@types/react": "^16.7.11", | ||
"@types/react-test-renderer": "^16.0.3", | ||
"@typescript-eslint/eslint-plugin": "^1.10.2", | ||
"babel-jest": "^24.7.1", | ||
"chalk": "^2.4.1", | ||
"conventional-changelog-cli": "^2.0.11", | ||
"dedent": "^0.7.0", | ||
"eslint": "^5.15.2", | ||
"flow-bin": "^0.98.0", | ||
"eslint": "^6.7.2", | ||
"flow-bin": "^0.107.0", | ||
"flow-copy-source": "^2.0.6", | ||
@@ -36,7 +34,7 @@ "jest": "^24.7.1", | ||
"react": "16.8.6", | ||
"react-native": "0.60.3", | ||
"react-native": "0.60.4", | ||
"react-test-renderer": "16.8.6", | ||
"release-it": "^12.3.3", | ||
"strip-ansi": "^5.2.0", | ||
"typescript": "^3.5.3" | ||
"typescript": "^3.7.3" | ||
}, | ||
@@ -48,3 +46,3 @@ "dependencies": { | ||
"react": ">=16.0.0", | ||
"react-test-renderer": ">= 16.0.0" | ||
"react-test-renderer": ">=16.0.0" | ||
}, | ||
@@ -51,0 +49,0 @@ "scripts": { |
@@ -138,2 +138,3 @@ import * as React from 'react'; | ||
export declare const flushMicrotasksQueue: () => Promise<any>; | ||
export declare const cleanup: () => void; | ||
export declare const debug: DebugAPI; | ||
@@ -140,0 +141,0 @@ export declare const fireEvent: FireEventAPI; |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Dynamic require
Supply chain riskDynamic require can indicate the package is performing dangerous or unsafe dynamic code execution.
Found 1 instance in 1 package
20
1
148766
53
1284