build_test 3.2.1 copy "build_test: ^3.2.1" to clipboard
build_test: ^3.2.1 copied to clipboard

Utilities for writing unit tests of Builders.

Testing utilities for users of package:build.
Issues related to build_test Pub Package Version Latest Dartdocs Join the chat on Gitter

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();
await readerWriter.loadIsolateSources();
testBuilder(
  yourBuilder,
  {} /* test assets here */,
  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);
});

Various test implementations of classes #