react-test-renderer
Advanced tools
Comparing version 1.1.0 to 15.3.0
103
index.js
@@ -1,103 +0,4 @@ | ||
var TestUtils = require('react-addons-test-utils'); | ||
var internalInstanceKey; | ||
var INTERNAL_INSTANCE_KEY = /^__reactInternalInstance/; | ||
'use strict'; | ||
function getInternalInstance(element) { | ||
if (element._reactInternalComponent) { | ||
return element._reactInternalComponent; | ||
} | ||
if (!internalInstanceKey) { | ||
internalInstanceKey = Object.keys(element).find(function(key) { | ||
return INTERNAL_INSTANCE_KEY.test(key); | ||
}); | ||
} | ||
return element[internalInstanceKey]; | ||
} | ||
function find(target, predicate) { | ||
return findAll(target, predicate)[0]; | ||
} | ||
function findAll(target, predicate) { | ||
return TestUtils.findAllInRenderedTree(target, function(item) { | ||
if (TestUtils.isCompositeComponent(item)) { | ||
return false; | ||
} | ||
return predicate(createRenderedElement(item)); | ||
}).map(createRenderedElement); | ||
} | ||
function findComponent(target, component) { | ||
return findAllComponent(target, component)[0]; | ||
} | ||
function findAllComponent(target, component) { | ||
return TestUtils.findAllInRenderedTree(target, function(item) { | ||
return TestUtils.isCompositeComponentWithType(item, component); | ||
}).map(createRenderedComponent); | ||
} | ||
function createSearchMethods(target) { | ||
return { | ||
find: function(predicate) { | ||
return find(target, predicate); | ||
}, | ||
findAll: function(predicate) { | ||
return findAll(target, predicate); | ||
}, | ||
findComponent: function(component) { | ||
return findComponent(target, component); | ||
}, | ||
findAllComponent: function(component) { | ||
return findAllComponent(target, component); | ||
} | ||
}; | ||
} | ||
function createSimulateMethod(element) { | ||
return function simulate(eventName, eventOpts) { | ||
TestUtils.Simulate[eventName](element, eventOpts); | ||
}; | ||
} | ||
function createRenderedElement(element) { | ||
var currentElement = getInternalInstance(element)._currentElement; | ||
return { | ||
type: currentElement.type, | ||
props: currentElement.props, | ||
simulate: createSimulateMethod(element) | ||
}; | ||
} | ||
function createRenderedComponent(component) { | ||
var renderedComponent = component._reactInternalInstance._renderedComponent; | ||
var rootElement = renderedComponent._nativeNode || renderedComponent._nodeWithLegacyProperties; | ||
var root = createRenderedElement(rootElement); | ||
var refs = {}; | ||
Object.keys(component.refs).forEach(function(ref) { | ||
refs[ref] = createRenderedElement(component.refs[ref]); | ||
}); | ||
var methods = createSearchMethods(component); | ||
return Object.assign({ | ||
root: root, | ||
refs: refs, | ||
}, createSearchMethods(component)); | ||
} | ||
function createRenderedTree(tree) { | ||
return createSearchMethods(tree); | ||
} | ||
function render(element) { | ||
return createRenderedTree(TestUtils.renderIntoDocument(element)); | ||
} | ||
module.exports = render; | ||
module.exports = require('react/lib/ReactTestRenderer'); |
{ | ||
"name": "react-test-renderer", | ||
"version": "1.1.0", | ||
"description": "A lightweight solution to testing fully-rendered React Components", | ||
"version": "15.3.0", | ||
"description": "React package for snapshot testing.", | ||
"main": "index.js", | ||
"scripts": { | ||
"test": "mocha" | ||
"repository": "facebook/react", | ||
"keywords": [ | ||
"react", | ||
"react-native", | ||
"react-testing" | ||
], | ||
"license": "BSD-3-Clause", | ||
"bugs": { | ||
"url": "https://github.com/facebook/react/issues" | ||
}, | ||
"author": "James Kyle <me@thejameskyle.com>", | ||
"license": "ISC", | ||
"dependencies": { | ||
"object-assign": "^4.1.0", | ||
"react-addons-test-utils": "^0.14.0 || ^15.0.0" | ||
}, | ||
"devDependencies": { | ||
"jsdom": "^9.1.0", | ||
"mocha": "^2.4.5", | ||
"react": "^0.14.0 || ^15.0.0" | ||
"homepage": "https://facebook.github.io/react/", | ||
"peerDependencies": { | ||
"react": "^15.3.0" | ||
} | ||
} |
108
README.md
@@ -1,104 +0,22 @@ | ||
# react-test-renderer | ||
# `react-test-renderer` | ||
> A lightweight solution to testing fully-rendered React Components | ||
This package provides an experimental React renderer that can be used to render React components to pure JavaScript objects, without depending on the DOM or a native mobile environment. | ||
## Installation | ||
Essentially, this package makes it easy to grab a snapshot of the "DOM tree" rendered by a React DOM or React Native component without using a browser or jsdom. | ||
```sh | ||
$ npm install react-test-renderer | ||
``` | ||
Usage: | ||
## Usage | ||
```jsx | ||
const ReactTestRenderer = require('react-test-renderer'); | ||
```js | ||
const render = require('react-test-renderer'); | ||
const stub = createStub(); | ||
render(<MyComponent onClick={stub}/>) | ||
.find(element => element.type === 'button') | ||
.simulate('click'); | ||
assert.ok(stub.called); | ||
``` | ||
## API | ||
```js | ||
interface Searchable { | ||
find(predicate: (element: RenderedElement) => boolean): RenderedElement; | ||
findAll(predicate: (element: RenderedElement) => boolean): Array<RenderedElement>; | ||
findComponent(component: ReactComponent): RenderedComponent; | ||
findAllComponent(component: ReactComponent): RenderedComponent; | ||
} | ||
interface RenderedElement mixins Searchable { | ||
type: string; | ||
props: Object; | ||
simulate(eventName: string, eventOpts?: Object): void; | ||
} | ||
interface RenderedComponent mixins Searchable { | ||
root: RenderedElement; | ||
refs: { [name: string]: RenderedElement }; | ||
} | ||
interface RenderedTree mixins Searchable {} | ||
function render(ReactElement): RenderedTree | ||
``` | ||
## Examples | ||
Find an element: | ||
```js | ||
var tree = render( | ||
<section> | ||
<h1>Hello World</h1> | ||
<p>...</p> | ||
</section> | ||
const renderer = ReactTestRenderer.create( | ||
<Link page="https://www.facebook.com/">Facebook</Link> | ||
); | ||
var heading = tree.find(element => element.type === 'h1'); | ||
assert.equal(heading.type, 'h1'); | ||
assert.deepEqual(heading.props, { | ||
children: 'Hello World' | ||
}); | ||
console.log(renderer.toJSON()); | ||
// { type: 'a', | ||
// props: { href: 'https://www.facebook.com/' }, | ||
// children: [ 'Facebook' ] } | ||
``` | ||
Simulate an event on a component: | ||
```js | ||
var stub = createStub(); | ||
var tree = render( | ||
<section> | ||
<button onClick={stub}>Click Me!</button> | ||
</section> | ||
); | ||
tree.find(element => element.type === 'button') | ||
.simulate('click'); | ||
assert.ok(stub.called); | ||
``` | ||
## Usage with jsdom | ||
Using [jsdom](https://github.com/tmpvar/jsdom) you can run this test renderer | ||
entirely in Node. Just set this up before you run your tests: | ||
```sh | ||
$ npm install --save-dev jsdom | ||
``` | ||
```js | ||
var jsdom = require('jsdom').jsdom; | ||
global.window = jsdom(undefined, { url: 'about:blank' }).defaultView; | ||
global.document = global.window.document; | ||
``` | ||
> Note: This was tested using jsdom@9 | ||
You can also use Jest's snapshot testing feature to automatically save a copy of the JSON tree to a file and check in your tests that it hasn't changed: http://facebook.github.io/jest/blog/2016/07/27/jest-14.html. |
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
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
New author
Supply chain riskA new npm collaborator published a version of the package for the first time. New collaborators are usually benign additions to a project, but do indicate a change to the security surface area of a package.
Found 1 instance in 1 package
Trivial Package
Supply chain riskPackages less than 10 lines of code are easily copied into your own project and may not warrant the additional supply chain risk of an external dependency.
Found 1 instance in 1 package
No contributors or author data
MaintenancePackage does not specify a list of contributors or an author in package.json.
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
Mixed license
License(Experimental) Package contains multiple licenses.
Found 1 instance in 1 package
No bug tracker
MaintenancePackage does not have a linked bug tracker in package.json.
Found 1 instance in 1 package
No repository
Supply chain riskPackage does not have a linked source code repository. Without this field, a package will have no reference to the location of the source code use to generate the package.
Found 1 instance in 1 package
No website
QualityPackage does not have a website.
Found 1 instance in 1 package
1
0
0
0
1423
3
2
23
3
- Removedobject-assign@^4.1.0
- Removedreact-addons-test-utils@15.6.2(transitive)
- Removedreact-dom@15.7.0(transitive)