@reason-native/rely

3.2.1 • Public • Published

@reason-native/rely

Detailed docs can be found at https://reason-native.com/docs/rely/

Installation

We recommend that you use esy to handle your package management. To install esy using npm, run

npm install -g esy

Add it as a dependency to your package.json (or esy.json) and run esy install. If you don't want to distribute your tests as part of your release, you can utilize multiple sandboxes and .opam files to separate your dependencies

package.json

...

dependencies": {
    ...
    "@reason-native/rely": "*",
    ...
},
...

Creating a test package

Let's start by creating a library for our tests. First create an opam file for your test package (it should be empty). Then let's create a directory called test and create a dune file to define compilation targets for our test library and executable (if you wish to use another build system, the important thing here is to pass the -linkall flag to the compiler)

│
├─my-lib-test.opam
├─test/
│   dune
│

dune

(library
   (name MyLibTest)
   (public_name my-lib-test.lib)
   ; the linkall flag ensures that all of our tests are compiled and the
   ; -g flag emits debugging information
   (ocamlopt_flags -linkall -g)
   ; you will want to depend on the library you are testing as well, however for
   ; the purposes of this example we are only depending on the test runner itself
   (libraries rely.lib )
   (modules (:standard \ RunTests))
)
(executable
  ; the for the library is automatically detected because of the name, but we
  ; need to explicitly specify the package here
  (package my-lib-test)
  (name RunTests)
  (public_name RunTests.exe)
  (libraries
    my-lib-test.lib
  )
  (modules RunTests)
)

Now let's create a file to initialize the test framework. Here we are specifying where snapshots should be stored as well as the root directory of your project for the formatting of terminal output.

│
├─my-lib-test.opam
├─test/
│   dune
│   TestFramework.re

TestFramework.re

include Rely.Make({
  let config =
    Rely.TestFrameworkConfig.initialize({
      snapshotDir: "path/to/test/lib/__snapshots__",
      projectDir: "path/to/your/project"
    });
});

Now we can finally write our first test!

│
├─my-lib-test.opam
├─test/
│   dune
│   TestFramework.re
│   MyFirstTest.re
open TestFramework;

describe("my first test suite", ({test}) => {
  test("1 + 1 should equal 2", ({expect}) => {
    expect.int(1 + 1).toBe(2);
  });
});

From here let's create an executable to actually run our tests (the name of this file corresponds to the name specified in the executable stanza in the dune file).

│
├─my-lib-test.opam
├─test/
│   dune
│   TestFramework.re
│   MyFirstTest.re
│   RunTests.re

RunTests.re

MyLibTest.TestFramework.cli()

Finally we can run esy build && esy x RunTests.exe to build and run our tests.

Developing:

npm install -g esy
git clone <this-repo>
esy install
esy build

Running Tests:

esy test

License

@reason-native/rely is MIT licensed, as found in the LICENSE file at the root of the reason-native repository.

Package Sidebar

Install

npm i @reason-native/rely

Weekly Downloads

34

Version

3.2.1

License

MIT

Unpacked Size

2.93 MB

Total Files

669

Last publish

Collaborators

  • andreypopp
  • benderson
  • jordwalke
  • rickyvetter