This repository is heavily inspired by Fable.Mocha by the awesome @Zaid-Ajaj.
Fable python library for testing. Inspired by the popular Expecto library for F# and adopts the testList, testCase and testCaseAsync primitives for defining tests.
/// Reuse unit tests from Expecto and Fable.Mocha
let tests_basic = testList "Basic" [
testCase "testCase works with numbers" <| fun () ->
Expect.equal (1 + 1) 2 "Should be equal"
testCase "isFalse works" <| fun () ->
Expect.isFalse (1 = 2) "Should be equal"
testCase "areEqual with msg" <| fun _ ->
Expect.equal 2 2 "They are the same"
testCase "isOk works correctly" <| fun _ ->
let actual = Ok true
Expect.isOk actual "Should be Ok"
]
Pending tests will not be run, but displayed as "skipped".
ptestCase "skipping this one" <| fun _ ->
failwith "Shouldn't be running this test"
ptestCaseAsync "skipping this one async" <|
async {
failwith "Shouldn't be running this test"
}
If there are any focused tests all other tests will not be run and are displayed as "skipped".
👀 Passing the
--fail-on-focused-tests
command line argument will make the runner fail if focused tests exist. This is used to avoid passing CI chains, when accidently pushing focused tests.Example
py my_focused_tests_file.py --fail-on-focused-tests
will fail.
let focusedTestsCases =
testList "Focused" [
ftestCase "Focused sync test" <| fun _ ->
Expect.equal (1 + 1) 2 "Should be equal"
ftestCaseAsync "Focused async test" <|
async {
Expect.equal (1 + 1) 2 "Should be equal"
}
]
Actually all tests run with this library will be sequential. The function is only added to comply with Expecto syntax.
From Nuget with:
paket add Fable.Pyxpecto --version 0.0.0
<PackageReference Include="Fable.Pyxpecto" Version="0.0.0" />
Use the following syntax to automatically switch between Expecto, Fable.Mocha and Pyxpecto:
#if FABLE_COMPILER_PYTHON
open Fable.Pyxpecto
#endif
#if FABLE_COMPILER_JAVASCRIPT
open Fable.Mocha
#endif
#if !FABLE_COMPILER
open Expecto
#endif
[<EntryPoint>]
let main argv =
#if FABLE_COMPILER_PYTHON
Pyxpecto.runTests all
#endif
#if FABLE_COMPILER_JAVASCRIPT
Mocha.runTests all
#endif
#if !FABLE_COMPILER
Tests.runTestsWithCLIArgs [] [||] all
#endif
👀 Everything in curly braces are placeholders
- Transpile test project to python
dotnet fable {path/to/tests} --lang py -o {path/to/tests}/py
- Run tests
py {path/to/tests}/{EntryFileName.py}
- Python
- check with
py --version
(Tested withPython 3.11.1
)
- check with
- Dotnet SDK
- check with
dotnet --version
(Tested with7.0.306
)
- check with
- Node
- check with
node --version
(Tested withv18.16.1
)
- check with
- npm
- check with
node --version
(Tested with9.2.0
)
- check with
Run all commands in root.
dotnet tool restore
npm install
./build.cmd runtests
Can be specified to run tests for specific environment.
./build.cmd runtestsdotnet
./build.cmd runtestsjs
./build.cmd runtestspy