angular_test 2.4.0
angular_test #
Testing infrastructure AngularDart,
used with the build_runner
package.
Documentation and examples:
_tests/test/
(tests for the main dart-lang/angular package)- AngularDart component testing documentation:
- Running Component Tests
- Component Testing: Basics
- Pages for individual topics, such as page objects and user actions
NOTE: Some of the guides above are out of date the for the latest angular_test
versions.
Additional resources:
- API reference
- Community/support: mailing list, Gitter chat room
- GitHub repo (dart-lang/angular): source code, test issues
- Pub packages: angular_test, build_runner, test
Overview #
angular_test
is a library for writing tests for AngularDart components.
// Assume this is 'my_test.dart'.
import 'my_test.template.dart' as ng;
void main() {
ng.initReflector();
tearDown(disposeAnyRunningTest);
test('should render "Hello World"', () async {
final testBed = new NgTestBed<HelloWorldComponent>();
final testFixture = await testBed.create();
expect(testFixture.text, 'Hello World');
await testFixture.update((c) => c.name = 'Universe');
expect(testFixture.text, 'Hello Universe');
});
}
@Component(selector: 'test', template: 'Hello {{name}}')
class HelloWorldComponent {
String name = 'World';
}
To use angular_test
, configure your package's pubspec.yaml
as follows:
dev_dependencies:
build_runner: ^1.0.0
build_test: ^0.10.0
build_web_compilers: ^1.0.0
IMPORTANT: angular_test
will not run without these dependencies set.
To run tests, use pub run build_runner test
. It automatically compiles your
templates and annotations with AngularDart, and then compiles all of the Dart
code to JavaScript in order to run browser tests. Here's an example of using
Chrome with Dartdevc:
pub run build_runner test -- -p chrome
For more information using pub run build_runner test
, see the documentation:
https://github.com/dart-lang/build/tree/master/build_runner#built-in-commands
2.4.0 #
New Features #
-
Added an optional named parameter,
maxIterations
, toFakeTimeNgZoneStabilizer
's constructor. If not specified 10 maximum loops are attempted toelapse
pending timers. In advanced use cases, a test may configure a higher threshold:NgZoneStabilizer allow100InsteadOf10() { return FakeTimeNgZoneStabilizer(timerZone, ngZone, maxIterations: 100); }
Bug Fixes #
NgTestFixture.update()
now delegates toComponentRef.update()
, which automatically callsmarkForCheck()
. Previously, anOnPush
component under test might not have been properly updated.
2.3.1 #
- Maintenance release to support Angular 6.0-alpha.
2.3.0 #
New Features #
- Added support for periodic timers in
FakeTimeNgZoneStabilizer
.
2.2.0 #
Breaking Changes #
-
Changed
NgTestStabilizer
initialization from originating from aList<NgTestStabilizerFactory>
to a singleNgTestStabilizerFactory
. The new top-level functioncomposeStabilizers
may be used to create a composite factory from multiple factories:composeStabilizers([ (_) => stabilizer1, (_) => stabilizer2, ])
This helps disambiguate the order of stabilizers running, which in turn will allow additional new stabilizers and features to be added in a non-breaking fashion. This change does not impact users that were not augmenting or creating their own stabilizers (i.e. most users/most tests).
-
Removed
NgTestStabilizer.all
. SeecomposeStabilizers
instead. -
Removed
NgZoneStabilizer
. The new class isRealTimeNgZoneStabilizer
, though most users should not be impactedNgTestBed
now uses the new stabilizer by default.
New Features #
- Added a new
NgTestStabilizer.alwaysStable
, which does what it sounds like and always reports stability. This handles making composition easier as the root stabilizer can effectively be a no-op.
Bug Fixes #
- When using
RealTimeNgZoneStabilizer
, do not try to stabilize timers that run outside of Angular zone.
2.1.0 #
New Features #
-
Supported
beforeComponentCreated(Injector)
when creating fixture to allow usinginjector
to set up prerequisite data for testing from DI.This is useful when an object (that is already injected to the app) is difficult to create otherwise. For example:
// ComplexDataLayer is difficult to instantiate in test, but it is needed // to set up some fake data before the component is loaded and used. final fixture = await testBed.create( beforeComponentCreated: (i) { var dataLayer = i.get(ComplexDataLayer) as ComplexDataLayer; dataLayer.setUpMockDataForTesting(); }, );
2.0.0 #
New Features #
-
Supported
FutureOr<void>
forbeforeChangeDetection
. -
NgZoneStabilizer
waits for the longest pending timer duringupdate()
. -
Added
isStable
API toNgTestStabilizer
. -
Made
NgTestStabilizerFactory
public.
Breaking Changes #
-
Removed
throwsInAngular
. UsethrowsA
. -
Removed
NgTestFixture#query/queryAll
, as debug-mode is being turned down. -
Run
DelegatingNgTestStabilizer
stabilizers one by one instead of run all at once.update()
for each stabilizers will be run at least once. After that, it will only be run if the current stabilizer is not stable. -
pub run angular_test
was entirely removed. Similar functionality is supported out of the box bybuild_runner
:
$ pub run build_runner test
-
Removed built-in support for
package:pageloader
. The current version ofpageloader
relies ondart:mirrors
, which is being removed from the web compilers (dart2js, dartdevc). There is a new version ofpageloader
in development that uses code generation. We'll consider re-adding support once available or through another package (i.e.angular_pageloader
or similar). -
Adding stabilizers to
NgTestBed
now takes a factory function of typeNgTestStabilizer Function(Injector)
, which is aliased asNgTestStabilizerFactory
. This allows usingNgTestBed
without any dynamic reflective factories (i.e.initReflector()
) and doesn't have impact to most users.
Bug Fixes #
-
Deleted an unnecessary
hostElement.append(componentRef.location)
. -
Fixed a bug where a
WillNeverStabilizeError
was thrown whenever there was a non-zero lengthTimer
being executed. This was due to a bug in how theNgStabilizer
was executing - constantly calling theupdate
function instead of calling it once and waiting for stabilization. -
Fixed a bug where stabilizers are considered stable even when some of them are not.
-
Fixed a bug where
_createDynamic
does not preserverootInjector
. -
Added
NgTestBed.forComponent
, which takes aComponentFactory<T>
, and optionally anInjectorFactory
. This allows writing tests entirely free of any invocations ofinitReflector()
.
1.0.1 #
Cleanup #
- Remove dependency on
angular_router
.
1.0.0 #
Breaking Changes & Deprecations
-
Throws in bootstrapping if the root component does not use default change detection. AngularDart does not support
OnPush
or other change detection strategies on the root component. -
Pub serve now defaults to a random unused port (instead of
8080
) and--port
is deprecated. Going forward the supported way to supply this argument is via--serve-arg
:
$ pub run angular_test --serve-arg=port=1234
- Option
--run-test-flag
(-t
) is now deprecated, and no longer has a default value ofaot
. Tags are still highly encouraged in order to have faster compilation times! Use--test-arg
instead:
$ pub run angular_test --test-arg=--tags=aot
- Option
--platform
(-p
) is now Deprecated, and no longer has a default value ofcontent-shell
, which was not always installed on host machines. Instead use--test-arg
:
$ pub run angular_test --test-arg=--platform=content-shell
-
Option
--name
(-n
) and--simple-name
(-N
) are also deprecated. Use--test-arg=--name=
and--test-arg=--simple-name=
instead. -
Changes to
compatibility.dart
might not be considered in future semver updates, and it highly suggested you don't use these APIs for any new code. -
Change
NgTestFixture.update
to have a single optional parameter
Features #
-
Add assertOnlyInstance to fixture to remove some boilerplate around testing the state of a instance. Only use to test state, not to update it.
-
Added
--serve-arg
and--test-arg
, which both support multiple arguments in order to have better long-term support for proxying to bothpub serve
andpub run test
without frequent changes to this package. For example to use the [DartDevCompiler (dartdevc)]:
$ pub run angular_test --serve-arg=web-compiler=dartdevc
- Add support for setting a custom
PageLoader
factory:
testBed = testBed.setPageLoader(
(element) => new CustomPageLoader(...),
);
- Add support for
query
andqueryAll
toNgTestFixture
. This works similar to theupdate
command, but is called back with either a single or multiple child component instances to interact with or run expectations against:
// Assert we have 3 instances of <child>.
await fixture.queryAll(
(el) => el.componentInstance is ChildComponent,
(children) {
expect(children, hasLength(3));
},
);
- Add built-in support for
package:pageloader
:
final fixture = await new NgTestBed<TestComponent>().create();
final pageObject = await fixture.getPageObject/*<ClickCounterPO>*/(
ClickCounterPO,
);
expect(await pageObject.button.visibleText, 'Click count: 0');
await pageObject.button.click();
expect(await pageObject.button.visibleText, 'Click count: 1');
Fixes #
-
Workaround for
pub {serve|build}
hanging onangular_test
as a dependency. -
Fixes a bug where the root was not removed from the DOM after disposed.
-
Added a missing dependency on
package:func
. -
Properly fix support for windows by using
pub.bat
. -
Replace all uses of generic comment with proper syntax.
-
Fixed a bug where
activeTest
was never set (and therefore disposed). -
Fixed a bug where
pub
, notpub.bat
, is run in windows. -
Update
pubspec.yaml
so it properly lists AngularDart3.0.0-alpha
-
Fix the executable so
pub run angular_test
can be used -
Fix a serious generic type error when
NgTestBed
is forked -
Fix a generic type error
-
Added
compatibility.dart
, a temporary API to some users migrate
Use this package as a library
1. Depend on it
Add this to your package's pubspec.yaml file:
dependencies:
angular_test: ^2.4.0
2. Install it
You can install packages from the command line:
with pub:
$ pub get
Alternatively, your editor might support pub get
.
Check the docs for your editor to learn more.
3. Import it
Now in your Dart code, you can use:
import 'package:angular_test/angular_test.dart';
Popularity:
Describes how popular the package is relative to other packages.
[more]
|
88
|
Health:
Code health derived from static analysis.
[more]
|
100
|
Maintenance:
Reflects how tidy and up-to-date the package is.
[more]
|
62
|
Overall:
Weighted score of the above.
[more]
|
86
|
We analyzed this package on Dec 9, 2019, and provided a score, details, and suggestions below. Analysis was completed with status completed using:
- Dart: 2.6.1
- pana: 0.13.1+4
Maintenance issues and suggestions
Homepage URL isn't helpful. (-10 points)
Update the homepage
field from pubspec.yaml
: link to a website about the package or use the source repository URL.
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 angular_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.5.0-dev.1.0 <3.0.0 | ||
angular | ^6.0.0-alpha+1 | 6.0.0-alpha+1 | |
collection | ^1.14.10 | 1.14.12 | |
meta | ^1.1.4 | 1.1.8 | |
pedantic | ^1.2.0 | 1.9.0 | |
Transitive dependencies | |||
analyzer | 0.37.1+1 | 0.39.2+1 | |
angular_ast | 0.5.11 | ||
angular_compiler | 0.4.5 | ||
args | 1.5.2 | ||
async | 2.4.0 | ||
build | 1.2.2 | ||
build_config | 0.4.1+1 | ||
built_collection | 4.3.0 | ||
built_value | 7.0.0 | ||
charcode | 1.1.2 | ||
checked_yaml | 1.0.2 | ||
code_builder | 3.2.1 | ||
convert | 2.1.1 | ||
crypto | 2.1.4 | ||
csslib | 0.16.1 | ||
dart_style | 1.2.10 | 1.3.3 | |
fixnum | 0.10.11 | ||
front_end | 0.1.21+1 | 0.1.29 | |
glob | 1.2.0 | ||
html | 0.14.0+3 | ||
intl | 0.15.8 | 0.16.0 | |
js | 0.6.1+1 | ||
json_annotation | 3.0.0 | ||
kernel | 0.3.21+1 | 0.3.29 | |
logging | 0.11.3+2 | ||
matcher | 0.12.6 | ||
node_interop | 1.0.3 | ||
node_io | 1.0.1+2 | ||
package_config | 1.1.0 | ||
path | 1.6.4 | ||
pub_semver | 1.4.2 | ||
pubspec_parse | 0.1.5 | ||
quiver | 2.1.2+1 | ||
source_gen | 0.9.4+6 | ||
source_span | 1.5.5 | ||
stack_trace | 1.9.3 | ||
string_scanner | 1.0.5 | ||
term_glyph | 1.1.0 | ||
typed_data | 1.1.6 | ||
watcher | 0.9.7+13 | ||
yaml | 2.2.0 | ||
Dev dependencies | |||
build_runner | ^1.0.0 | ||
build_test | ^0.10.2+5 | ||
build_web_compilers | ^2.0.0 | ||
test | ^1.3.0 |