Generate automated tests for your Node.js app via LLMs without developers having to write a single line of code.
The following details are for generating unit tests. To view the docs on how to generate integration tests, click here.
If you want to try out Pythagora using Visual Studio Code extension you can download it here.
To install Pythagora run:
npm i pythagora --save-dev
Then, add your API key and youβre ready to get tests generated. After that, just run the following command from the root directory of your repo:
npx pythagora --unit-tests --func <FUNCTION_NAME>
Where <FUNCTION_NAME>
is the name of the function you want to generate unit tests for. Just make sure that your function is exported from a file. You can see other options like generating tests for multiple files or folders below in the Options section.
If you wish to expand your current test suite with more tests to get better code coverage you can run:
npx pythagora --expand-unit-tests --path <PATH_TO_YOUR_TEST_SUITE>
for more details on expanding existing tests see below in the Expanding existing tests section.
NOTE: on Windows make sure to run all commands using Git Bash
and not Power Shell
or anything similiar
Here are some demo videos that can help you get started.
Pythagora Unit Tests Demo (2 min)
Here are examples of open sourced repositories that we forked and created tests with Pythagora so you can easily see it in action.
When Pythagora generates unit tests, it uses the following approach:
If you already have generated tests for your codebase but you just want to increase your code coverage or cover more edge cases, simply run:
npx pythagora --expand-unit-tests --path <PATH_TO_YOUR_TEST_SUITE>
When running command PATH_TO_YOUR_TEST_SUITE
can be path to a single test file or to a folder and all test files inside of that folder will be processed and expanded.
Thatβs all, enjoy your new code coverage!
To generate unit tests for one single function, run:
npx pythagora --unit-tests --func <FUNCTION_NAME>
To generate unit tests for one single function in a specific file, run:
npx pythagora --unit-tests --func <FUNCTION_NAME> --path ./path/to/file.js
To generate unit tests for all functions in a file, run:
npx pythagora --unit-tests --path ./path/to/file.js
To generate unit tests for all functions in all files in a folder, run:
npx pythagora --unit-tests --path ./path/to/folder/
Pythagora uses GPT-4 to generate tests so you either need to have OpenAI API Key or Pythagora API Key. You can get your Pythagora API Key here or OpenAI API Key here. Once you have it, add it to Pythagora with:
npx pythagora --config --pythagora-api-key <API_KEY>
or
npx pythagora --config --openai-api-key <API_KEY>
To run the generated tests, you can simply run
npx jest ./pythagora_tests/
or to run tests from a specific file or a folder, run npx jest <PATH_TO_FILE_OR_FOLDER>
. Currently, Pythagora supports only generating Jest tests but if you would like it to generate tests in other frameworks, let us know at [email protected].
The best unit tests that Pythagora generates are the ones that are standalone functions (eg. helpers). Basically, the parts of the code that actually can be unit tested. For example, take a look at this Pythagora file - it contains helper functions that are a perfect candidate for unit tests. When we ran npx pythagora --unit-tests --path ./src/utils/common.js
- it generated 145 tests from which only 17 failed. What is amazing is that only 6 tests failed because they were incorrectly written and the other 11 tests caught bugs in the code itself. You can view these tests here.
We donβt store any of your code on our servers. However, the code is being sent to GPT and hence OpenAI. Here is their privacy policy.
a function you want to generate tests for needs to be exported from the file. For example, if you have a file like this:
function mongoObjToJson(originalObj) {
...
}
module.exports = {
mongoObjToJson
};
Then, to generate unit tests for the mongoObjToJson
function, you can run:
npx pythagora --unit-tests --func mongoObjToJson
How accurate are these tests?
npx pythagora --unit-tests --path ./src/utils/common.js
- it generated 145 tests from which only 17 failed. What is amazing is that only 6 tests failed because they were incorrectly written and the other 11 tests caught bugs in the code itself. You can view these tests here.Should I review generated tests?
Tests help me think about my code - I donβt want to generate them automatically
Is Pythagora limited to a specific programming language or framework?
Can Pythagora generate integration tests as well?
Is Pythagora compatible with all JavaScript testing frameworks?
How does Pythagora handle sensitive or proprietary code?
Is Pythagora suitable for all types of projects?
This is an alpha version of Pythagora. To get an update about the beta release or to give a suggestion on tech (framework / database) you want Pythagora to support you can π add your email / comment here π .
π¬ Join the discussion on our Discord server.
π¨ Get updates on new features and beta release by adding your email here.
π As an open source tool, it would mean the world to us if you starred the Pythagora repo π