{"id":16139002,"url":"https://github.com/slxiao/test-funnel","last_synced_at":"2025-08-07T14:33:25.364Z","repository":{"id":46926626,"uuid":"198181259","full_name":"slxiao/test-funnel","owner":"slxiao","description":"⌛️ test selector for Javascript ","archived":false,"fork":false,"pushed_at":"2024-10-25T03:45:53.000Z","size":1177,"stargazers_count":22,"open_issues_count":19,"forks_count":2,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-03-09T13:03:51.021Z","etag":null,"topics":["dependencies","javascript","regression-test-selection","regression-testing","unit-testing"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/slxiao.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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":"2019-07-22T08:33:50.000Z","updated_at":"2024-10-25T03:45:57.000Z","dependencies_parsed_at":"2024-10-25T06:38:03.230Z","dependency_job_id":"5dede0ed-351e-4951-900f-853e9be78cb0","html_url":"https://github.com/slxiao/test-funnel","commit_stats":{"total_commits":42,"total_committers":3,"mean_commits":14.0,"dds":0.04761904761904767,"last_synced_commit":"1b1a222931aaa27d0c9160011aaf9e6000ce9621"},"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/slxiao%2Ftest-funnel","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/slxiao%2Ftest-funnel/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/slxiao%2Ftest-funnel/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/slxiao%2Ftest-funnel/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/slxiao","download_url":"https://codeload.github.com/slxiao/test-funnel/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243940101,"owners_count":20372045,"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":["dependencies","javascript","regression-test-selection","regression-testing","unit-testing"],"created_at":"2024-10-09T23:46:47.658Z","updated_at":"2025-03-18T16:31:04.893Z","avatar_url":"https://github.com/slxiao.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# test-funnel\n\n\u003cp align=\"center\"\u003e\n\t\u003cimg alt=\"Last version\" src=\"https://img.shields.io/github/tag/slxiao/test-funnel.svg?style=flat-square\" /\u003e\n\t\u003ca href=\"https://travis-ci.org/slxiao/test-funnel\"\u003e\n\t\t\u003cimg alt=\"Build Status\" src=\"http://img.shields.io/travis/slxiao/test-funnel/master.svg?style=flat-square\" /\u003e\n\t\u003c/a\u003e\n\t\u003ca href=\"https://www.npmjs.org/package/test-funnel\"\u003e\n\t\t\u003cimg alg=\"NPM Status\" src=\"http://img.shields.io/npm/dm/test-funnel.svg?style=flat-square\" /\u003e\n\t\u003c/a\u003e\n\u003c/p\u003e\n\n**test-funnel** is an Javascript unit test selector. It can dynamically select test cases that are impacted by modified source files for execution, thus improving test efficiency and saving developer time. Generally speaking, it is one kind of [Regression Test Selection](https://users.oden.utexas.edu/~sbiswas/files/papers/informaticasurvey.pdf) technology.\n\nSome key points of **test-funnel**:\n- It supports both Mocha and Jest frameworks\n- Case selection algorithm is built on the awesome [madge](https://github.com/pahen/madge) library\n- Support specify commits for changed files extraction\n- Support extration, selection and exectution in one command\n\n[中文介绍](https://mp.weixin.qq.com/s/jDQbcYF_h0IQNNzQiseokg)\n\n# Installation\n```shell\n$ npm -g install test-funnel\n```\n# CLI Usgae\nAfter installed, command `test-funnel` will be available. Run command `test-funnel -h` to get help guidelines.\n```shell\nUsage: test-funnel [options]\n\nOptions:\n  -V, --version                   output the version number\n  -b, --basefolder \u003cpath\u003e         folder of git repository, default: ./\n  -t, --testfolder \u003cpath\u003e         folder of test files, default: test\n  -e, --testfileextention \u003cname\u003e  extention of test files, default: test.js\n  -n, --newcommit \u003cname\u003e          new commit for comparison, default: HEAD~0\n  -o, --oldcommit \u003cname\u003e          old commit for comparison, default: HEAD~1\n  -r, --runner \u003cname\u003e             test runner, could be one of jest/mocha, not trigger runner if not specified\n  -h, --help                      output usage information\n```\n\n# API Usage\n```js\nvar Funnel = require('test-funnel');\n​\nFunnel ({\n    baseFolder: \"./\",\n    testFolder: \"test\",\n    testFileExtention: \"test.js\",\n    newCommit: \"HEAD~0\",\n    oldCommit: \"HEAD~1\",\n    runner: \"\"\n});\n```\n# License\nMIT License\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fslxiao%2Ftest-funnel","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fslxiao%2Ftest-funnel","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fslxiao%2Ftest-funnel/lists"}