build_test 3.3.1
build_test: ^3.3.1 copied to clipboard
Utilities for writing unit tests of Builders.
Testing utilities for users of package:build.
Installation #
This package is intended to only be as a development dependency for users
of package:build, and should not be used in any production code. Simply
add to your pubspec.yaml:
dev_dependencies:
build_test: ^3.0.0
Running tests #
To run tests, you should go through the dart run build_runner test command.
This will compile all your tests to a temp directory and run them using
dart run test. If you would like to see the output directory, you can use the
--output=<dir> option to force the output to go to a specific place.
Forwarding additional args to dart run test #
It is very common to need to pass some arguments through to the eventual call
to dart run test. To do this, add all those args after an empty -- arg.
For example, to run all chrome platform tests you would do
dart run build_runner test -- -p chrome.
Debugging web tests #
This package will automatically create *.debug.html files next to all your
*_test.dart files, which can be loaded in a browser from the normal
development server (dart run build_runner serve).
Note: In order to run the tests this way, you will need to configure them
to be compiled (by default we only compile *.browser_test.dart files). You
can do this in your build.yaml file, with something like the following:
targets:
$default:
builders:
build_web_compilers:entrypoint:
generate_for:
- test/**_test.dart
- web/**.dart
You may also view an index of links to every *.debug.html file by navigating
to http://localhost:8081 (or wherever your test folder is being served).
Writing tests for your custom Builder #
In addition to assiting in running normal tests, this package provides some
utilities for testing your custom Builder classes.
See the test folder in the build package for more examples.
Run a Builder within a test environment #
Using testBuilder, you can run a functional test of a
Builder, including feeding specific assets, and more. It automatically
creates an in-memory representation of various utility classes.
Exposing actual package sources to testBuilder #
To pass sources on disk to testBuilder, create a TestReaderWriter. You can
write individual sources to it from a PackageAssetReader, or write all sources
to it with loadIsolateSources:
final readerWriter = TestReaderWriter(rootPackage: 'test_package');
await readerWriter.testing.loadIsolateSources();
testBuilder(
yourBuilder,
{'test_package|lib/a.dart': '''
import 'package:real_package/annotations.dart';
@RealAnnotation()
class TestClass {}
'''},
readerWriter: readerWriter,
);
Resolve source code for testing #
Using resolveAsset and
resolveSource, you can resolve Dart source code into a
static element model, suitable for probing and using within tests of code you
might have written for a Builder:
test('should resolve a simple dart file', () async {
var resolver = await resolveSource(r'''
library example;
class Foo {}
''');
var libExample = resolver.getLibraryByName('example');
expect(libExample.getType('Foo'), isNotNull);
});