{"id":16715497,"url":"https://github.com/stijnmoreels/fscenario","last_synced_at":"2026-03-08T23:34:11.005Z","repository":{"id":92225600,"uuid":"161357044","full_name":"stijnmoreels/FScenario","owner":"stijnmoreels","description":"Reusable integration test building blocks to make writing integration tests more fun.","archived":false,"fork":false,"pushed_at":"2022-11-26T10:37:27.000Z","size":10719,"stargazers_count":10,"open_issues_count":1,"forks_count":2,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-10T06:18:52.855Z","etag":null,"topics":["assert","assertions","clean-up","defect-localization","disposable","filesystem","fixture","fsharp","functional","http","integration-testing","integration-tests","no-stress","open-minded","performance-tests","polling","reliable","scenario-tester","testing","zero-waste"],"latest_commit_sha":null,"homepage":"https://stijnmoreels.github.io/FScenario/","language":"F#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"unlicense","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/stijnmoreels.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-12-11T15:47:56.000Z","updated_at":"2023-06-29T05:35:44.000Z","dependencies_parsed_at":null,"dependency_job_id":"b246a348-50c5-4210-8e30-cc1f8deb5090","html_url":"https://github.com/stijnmoreels/FScenario","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/stijnmoreels/FScenario","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stijnmoreels%2FFScenario","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stijnmoreels%2FFScenario/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stijnmoreels%2FFScenario/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stijnmoreels%2FFScenario/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/stijnmoreels","download_url":"https://codeload.github.com/stijnmoreels/FScenario/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stijnmoreels%2FFScenario/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266276085,"owners_count":23903981,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["assert","assertions","clean-up","defect-localization","disposable","filesystem","fixture","fsharp","functional","http","integration-testing","integration-tests","no-stress","open-minded","performance-tests","polling","reliable","scenario-tester","testing","zero-waste"],"created_at":"2024-10-12T21:09:34.171Z","updated_at":"2026-03-08T23:34:10.972Z","avatar_url":"https://github.com/stijnmoreels.png","language":"F#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# FScenario\n\nFScenario is a .NET project to help developers writing more safe integration tests but also to make the developing more fun.\nThe project contains several ways to help the developer to clean up in after the integration test has run, polling mechanisms to make the assertion phase more reliable, building blocks to create your own disposable fixture, ...\n\n\u003cimg src=\"/docsrc/files/img/logo.png\" width=100 height=100 alt=\"logo\" /\u003e\n\n## Information\n\nFollowing resources contains some extra information about this library:\n* [FScenario Wiki](https://stijnmoreels.github.io/FScenario/)\n* [Reusable Integration Test Building Blocks with F# FScenario and C# Interop](https://www.codit.eu/blog/reusable-integration-test-building-blocks-with-f-fscenario-and-c-interop/)\n\n## NuGet\n\n[![NuGet Badge](https://buildstats.info/nuget/fscenario)](https://www.nuget.org/packages/fscenario)\n\n## Build Status\n\n| Mono                                                                                                                                     | .NET                                                                                                                                                                              |\n| ---------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| [![Mono CI Build Status](https://img.shields.io/travis/stijnmoreels/FScenario/master.svg)](https://travis-ci.org/stijnmoreels/FScenario) | [![.NET Build status](https://ci.appveyor.com/api/projects/status/d95a93ywn48ldiss/branch/master?svg=true)](https://ci.appveyor.com/project/stijnmoreels/fscenario/branch/master) |\n\n## Examples\n\nThe project exposes several reusable building blocks to make your integration/scenario test more reliable in seconds.\n\nSeveral test fixtures to test file system related functionality:\n\n```fsharp\nopen System.IO\nopen Expecto\nopen FScenario\n\nlet startYourApplication = ignore\n\n[\u003cTests\u003e]\nlet file_tests =\n    testCaseAsync \"should poll for file presence\" \u003c| async {\n      Dir.clean \".\"\n      do startYourApplication\n      let! f = Poll.untilFileExistsEvery1sFor5s \"some-file.txt\"\n      FileInfo.delete f\n};\n```\n\nSeveral test fixtures to test HTTP functionality or HTTP callbacks from your applications without any big setup.\n\n```fsharp\nopen Expecto\nopen FScenario\n\n[\u003cTests\u003e]\nlet http_tests =\n    testCaseAsync \"starts http server and GET -\u003e OK\" \u003c| async {\n        let endpoint = \"http://localhost:8080\"\n        use _ = Http.server endpoint\n        do! Poll.untilHttpOkEvery1sFor5s endpoint\n        use! res = Http.get endpoint\n        Expect.equal OK res.StatusCode \"http status code should be OK\"\n    };\n```\n\nAnd a lot more building blocks that are written in such a generic way, you can use it anywhere.\n\n```fsharp\nasync {\n    do! Poll.target (fun () -\u003e async { return Dir.files \"my-dir\" })\n        |\u003e Poll.until (Seq.length \u003e\u003e (=) 3)\n        |\u003e Poll.every _1s\n        |\u003e Poll.timeout _10s\n        |\u003e Poll.error \"Directory 'my-dir' should have 3 files\" }\n```\n\nWith full C# support!\n\n```csharp\nPoll.Target(() =\u003e Task.FromResult(Dir.Files(\"my-dir\")))\n    .Until(fs =\u003e fs.Length == 3)\n    .Every(TimeSpans._1s)\n    .For(TimeSpans._10s)\n    .Error(\"Directory 'my-dir' should have 3 files);\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstijnmoreels%2Ffscenario","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fstijnmoreels%2Ffscenario","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstijnmoreels%2Ffscenario/lists"}