bs-ospec
BuckleScript bindings for the excellent and minimal ospec testing library. Perfect for simple testing and constructing your own, custom assertions.
Installation
$ npm install --save-dev ospec bs-ospec
Then add "bs-ospec"
to your bsconfig.json
dev dependencies:
{
...
"bs-dev-dependencies": [
"bs-ospec"
]
}
Example Usage
First, make sure your tests are in a folder EXACTLY named tests/
(this limitation should soon be lifted).
Next, write your tests. Ospec uses a single function o()
to do pretty much everything. However, OCaml doesn't support overloaded functions, so bs-ospec separates each use case into its own function (it all compiles to a single function in the end).
open BsOspec;
describe("Example", () => {
test("sync example", () => {
f(x,y) |> equals("a correct value");
f(x,y) |> equals("a correct value", ~m="A descriptive failure message");
g(x,y) |> deepEquals(["another", "correct", "value"]);
});
testAsync("async example", done_ => {
someTask()
|> Task.run(result => {
result |> equals("expected");
done_()
})
});
testAsyncLong("longer async example", (done_, timeout) => {
timeout(2000)
someLongTask()
|> Task.run(result => {
result |> equals("expected");
done_()
})
});
});
Lastly, run ospec
in your terminal to run your test suite.
Bindings
See the source for the full details.
Test Definitions:
describe
- Group a collection of tests. Not required.test
- Define a synchronous testtestAsync
- Define an async testtestAsyncLong
- Define an async test expected to last longer than 50ms.testOnly
, testAsyncOnly
, testAsyncLongOnly
- Define and only run this test. Useful for focusing on a single test.
Hooks:
beforeEach
, beforeEachAsync
- Run code before each testafterEach
, afterEachAsync
- Run code after each testbefore
, beforeAsync
- Run code once before all testsafter
, afterAsync
- Run code once after all tests
Assertions:
equals(expected, ~m=?, actual)
- Expect a value to equal another value. Optionally pass in ~m="my msg"
to show a custom message if the assertion fails.deepEquals(expected, ~m=?, actual)
- Expect a value to deep equal another value.notEquals(expected, ~m=?, actual)
notDeepEquals(expected, ~m=?, actual)
Build
npm run build
Build + Watch
npm run start
Editor
If you use vscode
, Press Windows + Shift + B
it will build automatically