over_react_test 2.8.0

  • Readme
  • Changelog
  • Installing
  • 73

OverReact Test #

Pub Build Status Test Coverage Documentation

A library for testing OverReact components.

Using it in your project #

  1. Import it into your test files:

     import 'package:over_react_test/over_react_test.dart';
    
  2. Run your tests:

     $ pub run test test/your_test_file.dart
    

Naming Conventions #

Variables and Types #

UsageActual TypeSuggested Referencing
render and render helper functionsReactComponent |Elementinstance
Component classReactClasstype
VDOM Instance (invoked UiProps)ReactElement-ReactElement or not suffixed
findDomNode, queryByTestId, etc.Elementnode
The Dart componentreact.Component (backed by ReactComponent)dartInstance
Invoked UiFactoryUiPropsbuilder

Example:

test('my test' () {
  var sampleBuilder = Sample();
  var sampleReactElement = sampleBuilder(); // Or var sample = sampleBuilder();
  var instance = render(sampleInstance);
  SampleComponent sampleDartInstance = getDartComponent(instance);
  var sampleNode = findDomNode(instance);
});

Test IDs #

When coming up with test ID strings:

  • DO NOT use spaces; space-delimited strings will be treated as separate test IDs

    Just like CSS class names, you can use multiple test IDs together, and use any one of them to target a given component/node.

  • PREFER following our naming scheme for consistency across projects:

    <library>.<Component>[.<subpart>...].<part>

    We recommend including a library abbreviation and component name within a test ID so that it's easy to track down where that ID came from.

    Namespacing (.<subpart>) can be added however it makes sense.

    Finally, test IDs should be descriptive and useful in the context of tests.

    Examples:

    • wsd.DatepickerPrimitive.goToSelectedButton
    • sox.AbstractDataLayoutGroup.headerBlock.title
  • CONSIDER adding multiple IDs to serve different purposes

    for (var i = 0; i < items.length; i++) {
      // ...
        ..addTestId('foo.Bar.menuItem')
        ..addTestId('foo.Bar.menuItem.$i')
        ..addTestId('foo.Bar.menuItem.${items[i].id}')
      // ...
    }
    

    With the output of above code, you can:

    • target all of the Bar component's menu items using foo.Bar.menuItem
    • target the 4th item using foo.Bar.menuItem.3
    • target the item corresponding to an item with id baz123 using foo.Bar.menuItem.baz123

    This won't always be needed, but it comes in handy in certain cases.

Documentation #

You would never skip reading the docs for a new language you are asked to learn, so please don't skip over reading our API documentation either.

Contributing #

Yes please! (Please read our contributor guidelines first)

Versioning #

The over_react_test library adheres to Semantic Versioning:

  • Any API changes that are not backwards compatible will bump the major version (and reset the minor / patch).
  • Any new functionality that is added in a backwards-compatible manner will bump the minor version (and reset the patch).
  • Any backwards-compatible bug fixes that are added will bump the patch version.

OverReact Test Changelog #

2.8.0 #

  • Update mount, render, and renderAttachedToDocument to automatically run component lifecycle in the same zone as the test.
    • This fixes some print statements from being swallowed and some failing expects from not failing tests properly

2.7.0 #

  • Add propTypes testing utilities

2.6.0 #

  • Drop support for React 15
  • Support Component2 in commonComponentTests

2.5.2 #

  • Add support for React 16 (raise upper bound of react to allow 5.x, over_react to allow 3.x)
  • Fix documentation link

2.5.1 #

  • Accommodate findAllInRenderedTree being passed text nodes in React 16

2.5.0 #

  • Update references to old JS interop helpers
  • Update contributing docs

2.4.1 #

  • Work around a bug in DDC where SvgElement className isn't String

2.3.0 #

  • Widen over_react range to allow 2.0.0

2.2.0 #

  • Update component boilerplate in preparation for over_react 2.0.0

2.1.0 #

  • Update component boilerplate in preparation for over_react 2.0.0

New Features

  • Dart 2 compatible!

Breaking Changes

  • The getComponentPropKeys() and testPropForwarding() functions have been removed, as they depended on dart:mirrors. Once there is a Dart-2-only release of over_react, this function will be re-added and will rely on information generated by the builder rather than using mirrors.

  • The commonComponentTests() function no longer calls testPropForwarding() since it has been removed. In other words, the shouldTestPropForwarding parameter is effectively a no-op until testPropForwarding() can be re-added.

1.1.1 #

Bugs Fixed

  • Sync common component test src with the lib it originated from.

1.1.0 #

New Features

  • #11: Add some test utilities that were left in over_react when the library was first created.

1.0.1 #

Misc

  • #8: Update prop error message to make it more DDC friendly

1.0.0 #

Initial public release of library.

Use this package as a library

1. Depend on it

Add this to your package's pubspec.yaml file:


dependencies:
  over_react_test: ^2.8.0

2. Install it

You can install packages from the command line:

with pub:


$ pub get

with Flutter:


$ flutter pub get

Alternatively, your editor might support pub get or flutter pub get. Check the docs for your editor to learn more.

3. Import it

Now in your Dart code, you can use:


import 'package:over_react_test/over_react_test.dart';
  
Popularity:
Describes how popular the package is relative to other packages. [more]
67
Health:
Code health derived from static analysis. [more]
91
Maintenance:
Reflects how tidy and up-to-date the package is. [more]
62
Overall:
Weighted score of the above. [more]
73
Learn more about scoring.

We analyzed this package on Jan 19, 2020, and provided a score, details, and suggestions below. Analysis was completed with status completed using:

  • Dart: 2.7.0
  • pana: 0.13.4

Health suggestions

Fix lib/src/over_react_test/common_component_util.dart. (-2.96 points)

Analysis of lib/src/over_react_test/common_component_util.dart reported 6 hints, including:

line 393 col 69: 'UiComponent' is deprecated and shouldn't be used. 4.0.0.

line 413 col 36: 'ReactDartComponentFactoryProxy' is deprecated and shouldn't be used. 6.0.0.

line 423 col 17: 'throwsPropError_Required' is deprecated and shouldn't be used. 3.0.0.

line 434 col 15: 'throwsPropError_Required' is deprecated and shouldn't be used. 3.0.0.

line 499 col 11: 'ReactDartComponentFactoryProxy' is deprecated and shouldn't be used. 6.0.0.

Fix lib/src/over_react_test/react_util.dart. (-2.48 points)

Analysis of lib/src/over_react_test/react_util.dart reported 5 hints:

line 155 col 7: 'Component' is deprecated and shouldn't be used. 6.0.0.

line 347 col 21: 'Component' is deprecated and shouldn't be used. 6.0.0.

line 384 col 50: 'Component' is deprecated and shouldn't be used. 6.0.0.

line 488 col 24: 'Component' is deprecated and shouldn't be used. 6.0.0.

line 491 col 7: 'Component' is deprecated and shouldn't be used. 6.0.0.

Fix lib/src/over_react_test/js_component.dart. (-1.49 points)

Analysis of lib/src/over_react_test/js_component.dart reported 3 hints:

line 19 col 68: 'ReactClassConfig' is deprecated and shouldn't be used. 6.0.0.

line 23 col 30: 'createClass' is deprecated and shouldn't be used. 6.0.0.

line 23 col 42: 'ReactClassConfig' is deprecated and shouldn't be used. 6.0.0.

Fix additional 6 files with analysis or formatting issues. (-2.50 points)

Additional issues in the following files:

  • lib/src/over_react_test/jacket.dart (2 hints)
  • lib/src/over_react_test/wrapper_component.dart (2 hints)
  • lib/src/over_react_test/custom_matchers.dart (1 hint)
  • lib/src/over_react_test/console_log_utils.dart (Run dartfmt to format lib/src/over_react_test/console_log_utils.dart.)
  • lib/src/over_react_test/dom_util.dart (Run dartfmt to format lib/src/over_react_test/dom_util.dart.)
  • lib/src/over_react_test/validation_util.dart (Run dartfmt to format lib/src/over_react_test/validation_util.dart.)

Maintenance issues and suggestions

Make sure dartdoc successfully runs on your package's source files. (-10 points)

exitCode: 255 stdout: parsing /tmp/pub-dartlang-dartdocPXPFMT/pkg/lib/jacket.dart... parsing /tmp/pub-dartlang-dartdocPXPFMT/pkg/lib/over_react_test.dart... parsing /dart-sdk/lib/core/core.dart... parsing /dart-sdk/lib/collection/collection.dart... parsing /dart-sdk/lib/internal/internal.dart... parsing /dart-sdk/lib/async/async.dart... parsing /dart-sdk/lib/convert/convert.dart... parsing /dart-sdk/lib/typed_data/typed_data.dart... parsing /dart-sdk/lib/math/math.dart... parsing /tmp/pub-dartlang-dartdocPXPFMT/pkg/lib/src/over_react_test/jacket.dart... parsing /dart-sdk/lib/html/dart2js/html_dart2js.dart... parsing /dart-sdk/lib/html/html_common/html_common_dart2js.dart... parsing /dart-sdk/lib/web_gl/dart2js/web_gl_dart2js.dart... parsing /dart-sdk/lib/_internal/js_runtime/lib/native_typed_data.dart... parsing /dart-sdk/lib/_internal/js_runtime/lib/interceptors.dart... parsing /dart-sdk/lib/_internal/js_runtime/lib/shared/embedded_names.dart... parsing /dart-sdk/lib/_internal/js_runtime/lib/js_helper.dart... parsing /dart-sdk/lib/_internal/js_runtime/lib/foreign_helper.dart... parsing /dart-sdk/lib/_internal/js_runtime/lib/js_names.dart... parsing /dart-sdk/lib/_internal/js_runtime/lib/rti.dart... [...] parsing /tmp/pub-cache-dirSBEZZD/hosted/pub.dartlang.org/built_value-7.0.8/lib/serializer.dart... parsing /tmp/pub-cache-dirSBEZZD/hosted/pub.dartlang.org/quiver-2.1.2+1/lib/async.dart... parsing /tmp/pub-cache-dirSBEZZD/hosted/pub.dartlang.org/quiver-2.1.2+1/lib/time.dart... parsing /tmp/pub-cache-dirSBEZZD/hosted/pub.dartlang.org/quiver-2.1.2+1/lib/pattern.dart... parsing /tmp/pub-cache-dirSBEZZD/hosted/pub.dartlang.org/quiver-2.1.2+1/lib/io.dart... parsing /tmp/pub-cache-dirSBEZZD/hosted/pub.dartlang.org/quiver-2.1.2+1/lib/testing/async.dart... parsing /tmp/pub-cache-dirSBEZZD/hosted/pub.dartlang.org/quiver-2.1.2+1/lib/testing/time.dart... parsing /tmp/pub-cache-dirSBEZZD/hosted/pub.dartlang.org/quiver-2.1.2+1/lib/testing/runtime.dart... parsing /tmp/pub-cache-dirSBEZZD/hosted/pub.dartlang.org/quiver-2.1.2+1/lib/testing/equality.dart... parsing /tmp/pub-cache-dirSBEZZD/hosted/pub.dartlang.org/quiver-2.1.2+1/lib/mirrors.dart... parsing /tmp/pub-cache-dirSBEZZD/hosted/pub.dartlang.org/quiver-2.1.2+1/lib/check.dart... parsing /tmp/pub-cache-dirSBEZZD/hosted/pub.dartlang.org/quiver-2.1.2+1/lib/strings.dart... parsing /tmp/pub-cache-dirSBEZZD/hosted/pub.dartlang.org/quiver-2.1.2+1/lib/cache.dart... parsing /tmp/pub-cache-dirSBEZZD/hosted/pub.dartlang.org/w_flux-2.10.6/lib/w_flux_server.dart... parsing /tmp/pub-cache-dirSBEZZD/hosted/pub.dartlang.org/test-1.11.1/lib/bootstrap/vm.dart... parsing /tmp/pub-cache-dirSBEZZD/hosted/pub.dartlang.org/test-1.11.1/lib/bootstrap/browser.dart... parsing /tmp/pub-cache-dirSBEZZD/hosted/pub.dartlang.org/test-1.11.1/lib/bootstrap/node.dart... parsing /tmp/pub-cache-dirSBEZZD/hosted/pub.dartlang.org/test_core-0.2.18/lib/backend.dart... parsing /tmp/pub-cache-dirSBEZZD/hosted/pub.dartlang.org/matcher-0.12.6/lib/mirror_matchers.dart... parsing /tmp/pub-cache-dirSBEZZD/hosted/pub.dartlang.org/stream_channel-2.0.0/lib/isolate_channel.dart... stderr: Documenting over_react_test... Unhandled exception: Stack Overflow #0 Dart2TypeSystem.isSubtypeOf (package:analyzer/src/generated/type_system.dart:1175:3) #1 Dart2TypeSystem.isSubtypeOf (package:analyzer/src/generated/type_system.dart:1282:14) #2 Dart2TypeSystem.isSubtypeOf (package:analyzer/src/generated/type_system.dart:1321:13) #3 Dart2TypeSystem.isSubtypeOf (package:analyzer/src/generated/type_system.dart:1289:14) #4 Dart2TypeSystem.isSubtypeOf (package:analyzer/src/generated/type_system.dart:1282:14) #5 Dart2TypeSystem._isInterfaceSubtypeOf (package:analyzer/src/generated/type_system.dart:2197:16) #6 Dart2TypeSystem.isSubtypeOf (package:analyzer/src/generated/type_system.dart:1388:14) #7 Dart2TypeSystem.isSubtypeOf (package:analyzer/src/generated/type_system.dart:1367:11) #8 Dart2TypeSystem.isSubtypeOf (package:analyzer/src/generated/type_system.dart:1289:14) #9 Dart2TypeSystem.isSubtypeOf (package:analyzer/src/generated/type_system.dart:1282:14) #10 Dart2TypeSystem.isSubtypeOf (package:analyzer/src/generated/type_system.dart:1321:13) #11 Dart2TypeSystem.isSubtypeOf (package:analyzer/src/generated/type_system.dart:1289:14) #12 Dart2TypeSystem.isSubtypeOf (package:analyzer/src/generated/type_system.dart:1282:14) #13 Dart2TypeSystem._isInterfaceSubtypeOf (package:analyzer/src/generated/type_system.dart:2197:16) #14 Dart2TypeSystem.isSubtypeOf (package:analyzer/src/generated/type_system.dart:1388:14) #15 Dart2TypeSystem.isSubtypeOf (package:analyzer/src/generated/type_system.dart:1367:11) #16 Dart2TypeSystem.isSubtypeOf (package:analyzer/src/generated/type_system.dart:1289:14) #17 Dart2TypeSystem.isSubtypeOf (package:analyzer/src/generated/type_system.dart:1282:14) #18 Dart2TypeSystem.isSubtypeOf (package:analyzer/src/generated/type_system.dart:1321:13) #19 Dart2TypeSystem.isSubtypeOf (package:analyzer/src/generated/type_system.dart:1289:14) #20 Dart2TypeSystem.isSubtypeOf (package:analyzer/src/generated/type_system.dart:1282:14) #21 Dart2TypeSystem._isInterfaceSubtypeOf (package:analyzer/src/generated/type_system.dart:2197:16) #22 Dart2TypeSystem.isSubtypeOf (package:analyzer/src/generated/type_system.dart:1388:14) #23 Dart2TypeSystem.isSubtypeOf (package:analyzer/src/generated/type_system.dart:1367:11) #24 Dart2TypeSystem.isSubtypeOf (package:analyzer/src/generated/type_system.dart:1289:14) #25 Dart2TypeSystem.isSubtypeOf (package:analyzer/src/generated/type_system.dart:1282:14) #26 Dart2TypeSystem.isSubtypeOf (package:analyzer/src/generated/type_system.dart:1321:13) #27 Dart2TypeSystem.isSubtypeOf (package:analyzer/src/generated/type_system.dart:1289:14) #28 Dart2TypeSystem.isSubtypeOf (package:analyzer/src/generated/type_system.dart:1282:14) #29 Dart2TypeSystem._isInterfaceSubtypeOf (package:analyzer/src/generated/type_system.dart:2197:16) #30 Dart2TypeSystem.isSubtypeOf (package:analyzer/src/generated/type_system.dart:1388:14) #31 Dart2TypeSystem.isSubtypeOf (package:analyzer/src/generated/type_system.dart:1367:11) #32 Dart2TypeSystem.isSubtypeOf (package:analyzer/src/generated/type_system.dart:1289:14) #33 Dart2TypeSystem.isSubtypeOf (package:analyzer/src/generated/type_system.dart:1282:14) #34 Dart2TypeSystem.isSubtypeOf (package:analyzer/src/generated/type_system.dart:1321:13) #35 Dart2TypeSystem.isSubtypeOf (package:analyzer/src/generated/type_system.dart:1289:14) #36 Dart2TypeSystem.isSubtypeOf (package:analyzer/src/generated/type_system.dart:1282:14) #37 Dart2TypeSystem._isInterfaceSubtypeOf (package:analyzer/src/generated/type_system.dart:2197:16) #38 Dart2TypeSystem.isSubtypeOf (package:analyzer/src/generated/type_system.dart:1388:14) #39 Dart2TypeSystem.isSubtypeOf (package:analyzer/src/generated/type_system.dart:1367:11) #40 Dart2TypeSystem.isSubtypeOf (package:analyzer/src/generated/type_system.dart:1289:14) #41 Dart2TypeSystem.isSubtypeOf (package:analyzer/src/generated/type_system.dart:1282:14) #42 Dart2TypeSystem.isSubtypeOf (package:analyzer/src/generated/type_system.dart:1321:13) #43 Dart2TypeSystem.isSubtypeOf (package:analyzer/src/generated/type_system.dart:1289:14) ... ... #6883 RecursiveAstVisitor.visitExpressionStatement (package:analyzer/dart/ast/visitor.dart:3501:18178) #6884 ExpressionStatementImpl.accept (package:analyzer/src/dart/ast/ast.dart:3668:49) #6885 RecursiveAstVisitor.visitBlock (package:analyzer/dart/ast/visitor.dart:3501:130146) #6886 RecursiveAstVisitor.visitBlockFunctionBody (package:analyzer/dart/ast/visitor.dart:1157:52) #6887 FunctionExpressionImpl.visitChildren (package:analyzer/src/dart/ast/ast.dart:1036:49) #6888 RecursiveAstVisitor.visitFunctionExpression (package:analyzer/dart/ast/visitor.dart:923:10) #6889 FunctionExpressionImpl.accept (package:analyzer/src/dart/ast/ast.dart:4969:49) #6890 AssignmentExpressionImpl.visitChildren (package:analyzer/src/dart/ast/ast.dart:730:21) #6891 CodeChecker.visitAssignmentExpression (package:analyzer/src/task/strong/checker.dart:255:10) #6892 AssignmentExpressionImpl.accept (package:analyzer/src/dart/ast/ast.dart:725:49) #6893 RecursiveAstVisitor.visitExpressionStatement (package:analyzer/dart/ast/visitor.dart:3501:18178) #6894 ExpressionStatementImpl.accept (package:analyzer/src/dart/ast/ast.dart:3668:49) #6895 RecursiveAstVisitor.visitBlock (package:analyzer/dart/ast/visitor.dart:3501:130146) #6896 RecursiveAstVisitor.visitBlockFunctionBody (package:analyzer/dart/ast/visitor.dart:1157:52) #6897 MethodDeclarationImpl.visitChildren (package:analyzer/src/dart/ast/ast.dart:1036:49) #6898 RecursiveAstVisitor.visitMethodDeclaration (package:analyzer/dart/ast/visitor.dart:1061:10) #6899 MethodDeclarationImpl.accept (package:analyzer/src/dart/ast/ast.dart:6943:49) #6900 ClassDeclarationImpl.visitChildren (package:analyzer/src/dart/ast/ast.dart:7520:20) #6901 RecursiveAstVisitor.visitClassDeclaration (package:analyzer/dart/ast/visitor.dart:701:10) #6902 ClassDeclarationImpl.accept (package:analyzer/src/dart/ast/ast.dart:1519:49) #6903 CompilationUnitImpl.visitChildren (package:analyzer/src/dart/ast/ast.dart:7520:20) #6904 CodeChecker.visitCompilationUnit (package:analyzer/src/task/strong/checker.dart:288:10) #6905 LibraryAnalyzer._computeVerifyErrors (package:analyzer/src/dart/analysis/library_analyzer.dart:381:13) #6906 LibraryAnalyzer.analyzeSync.

The package description is too short. (-18 points)

Add more detail to the description field of pubspec.yaml. Use 60 to 180 characters to describe the package, what it does, and its target use case.

Maintain an example. (-10 points)

Create a short demo in the example/ directory to show how to use this package.

Common filename patterns include main.dart, example.dart, and over_react_test.dart. Packages with multiple examples should provide example/README.md.

For more information see the pub package layout conventions.

Dependencies

Package Constraint Resolved Available
Direct dependencies
Dart SDK >=2.4.0 <3.0.0
js ^0.6.1+1 0.6.1+1
matcher ^0.12.1+4 0.12.6
over_react ^3.1.3 3.1.7
react ^5.2.1 5.3.0
test ^1.9.1 1.11.1
Transitive dependencies
analyzer 0.38.5 0.39.4
args 1.5.2
async 2.4.0
boolean_selector 1.0.5
build 1.2.2
built_collection 4.3.2
built_redux 7.5.9
built_value 7.0.8
charcode 1.1.2
cli_repl 0.2.0+1
collection 1.14.12
colorize 2.0.0
convert 2.1.1
coverage 0.13.3+3
crypto 2.1.4
csslib 0.16.1
dart2_constant 1.0.2+dart2
dart_style 1.3.3
fixnum 0.10.11
front_end 0.1.27 0.1.29
glob 1.2.0
html 0.14.0+3
http 0.12.0+4
http_multi_server 2.1.0
http_parser 3.1.3
intl 0.15.8 0.16.1
io 0.3.3
kernel 0.3.27 0.3.29
logging 0.11.4
meta 1.1.8
mime 0.9.6+3
multi_server_socket 1.0.2
node_interop 1.0.3
node_io 1.0.1+2
node_preamble 1.4.8
package_config 1.1.0
package_resolver 1.0.10
path 1.6.4
platform_detect 1.4.0
pool 1.4.0
pub_semver 1.4.2
quiver 2.1.2+1
redux 3.0.0 4.0.0
redux_dev_tools 0.4.0 0.5.2
sass 1.25.0
shelf 0.7.5
shelf_packages_handler 1.0.4
shelf_static 0.2.8
shelf_web_socket 0.2.3
source_gen 0.9.4+6 0.9.4+7
source_map_stack_trace 1.1.5
source_maps 0.10.8
source_span 1.6.0
stack_trace 1.9.3
stream_channel 2.0.0
stream_transform 1.1.0
string_scanner 1.0.5
term_glyph 1.1.0
test_api 0.2.13
test_core 0.2.18
transformer_utils 0.2.3
tuple 1.0.3
typed_data 1.1.6
vm_service 2.3.1
w_common 1.20.1
w_flux 2.10.6
watcher 0.9.7+13
web_socket_channel 1.1.0
yaml 2.2.0
Dev dependencies
build_runner ^1.7.1
build_test ^0.10.9
build_web_compilers ^2.5.1
dart_dev ^2.2.0
dependency_validator ^1.4.0
pedantic ^1.8.0 1.9.0