|
| 1 | +# Help |
| 2 | + |
| 3 | +## Running the tests |
| 4 | + |
| 5 | +We use [pytest][pytest: Getting Started Guide] as our website test runner. |
| 6 | +You will need to install `pytest` on your development machine if you want to run tests for the Python track locally. |
| 7 | +You should also install the following `pytest` plugins: |
| 8 | + |
| 9 | +- [pytest-cache][pytest-cache] |
| 10 | +- [pytest-subtests][pytest-subtests] |
| 11 | + |
| 12 | +Extended information can be found in our website [Python testing guide][Python track tests page]. |
| 13 | + |
| 14 | + |
| 15 | +### Running Tests |
| 16 | + |
| 17 | +To run the included tests, navigate to the folder where the exercise is stored using `cd` in your terminal (_replace `{exercise-folder-location}` below with your path_). |
| 18 | +Test files usually end in `_test.py`, and are the same tests that run on the website when a solution is uploaded. |
| 19 | + |
| 20 | +Linux/MacOS |
| 21 | +```bash |
| 22 | +$ cd {path/to/exercise-folder-location} |
| 23 | +``` |
| 24 | + |
| 25 | +Windows |
| 26 | +```powershell |
| 27 | +PS C:\Users\foobar> cd {path\to\exercise-folder-location} |
| 28 | +``` |
| 29 | + |
| 30 | +<br> |
| 31 | + |
| 32 | +Next, run the `pytest` command in your terminal, replacing `{exercise_test.py}` with the name of the test file: |
| 33 | + |
| 34 | +Linux/MacOS |
| 35 | +```bash |
| 36 | +$ python3 -m pytest -o markers=task {exercise_test.py} |
| 37 | +==================== 7 passed in 0.08s ==================== |
| 38 | +``` |
| 39 | + |
| 40 | +Windows |
| 41 | +```powershell |
| 42 | +PS C:\Users\foobar> py -m pytest -o markers=task {exercise_test.py} |
| 43 | +==================== 7 passed in 0.08s ==================== |
| 44 | +``` |
| 45 | + |
| 46 | + |
| 47 | +### Common options |
| 48 | +- `-o` : override default `pytest.ini` (_you can use this to avoid marker warnings_) |
| 49 | +- `-v` : enable verbose output. |
| 50 | +- `-x` : stop running tests on first failure. |
| 51 | +- `--ff` : run failures from previous test before running other test cases. |
| 52 | + |
| 53 | +For additional options, use `python3 -m pytest -h` or `py -m pytest -h`. |
| 54 | + |
| 55 | + |
| 56 | +### Fixing warnings |
| 57 | + |
| 58 | +If you do not use `pytest -o markers=task` when invoking `pytest`, you might receive a `PytestUnknownMarkWarning` for tests that use our new syntax: |
| 59 | + |
| 60 | +```bash |
| 61 | +PytestUnknownMarkWarning: Unknown pytest.mark.task - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/mark.html |
| 62 | +``` |
| 63 | + |
| 64 | +To avoid typing `pytest -o markers=task` for every test you run, you can use a `pytest.ini` configuration file. |
| 65 | +We have made one that can be downloaded from the top level of the Python track directory: [pytest.ini][pytest.ini]. |
| 66 | + |
| 67 | +You can also create your own `pytest.ini` file with the following content: |
| 68 | + |
| 69 | +```ini |
| 70 | +[pytest] |
| 71 | +markers = |
| 72 | + task: A concept exercise task. |
| 73 | +``` |
| 74 | + |
| 75 | +Placing the `pytest.ini` file in the _root_ or _working_ directory for your Python track exercises will register the marks and stop the warnings. |
| 76 | +More information on pytest marks can be found in the `pytest` documentation on [marking test functions][pytest: marking test functions with attributes] and the `pytest` documentation on [working with custom markers][pytest: working with custom markers]. |
| 77 | + |
| 78 | +Information on customizing pytest configurations can be found in the `pytest` documentation on [configuration file formats][pytest: configuration file formats]. |
| 79 | + |
| 80 | + |
| 81 | +### Extending your IDE or Code Editor |
| 82 | + |
| 83 | +Many IDEs and code editors have built-in support for using `pytest` and other code quality tools. |
| 84 | +Some community-sourced options can be found on our [Python track tools page][Python track tools page]. |
| 85 | + |
| 86 | +[Pytest: Getting Started Guide]: https://docs.pytest.org/en/latest/getting-started.html |
| 87 | +[Python track tools page]: https://exercism.org/docs/tracks/python/tools |
| 88 | +[Python track tests page]: https://exercism.org/docs/tracks/python/tests |
| 89 | +[pytest-cache]:http://pythonhosted.org/pytest-cache/ |
| 90 | +[pytest-subtests]:https://github.com/pytest-dev/pytest-subtests |
| 91 | +[pytest.ini]: https://github.com/exercism/python/blob/main/pytest.ini |
| 92 | +[pytest: configuration file formats]: https://docs.pytest.org/en/6.2.x/customize.html#configuration-file-formats |
| 93 | +[pytest: marking test functions with attributes]: https://docs.pytest.org/en/6.2.x/mark.html#raising-errors-on-unknown-marks |
| 94 | +[pytest: working with custom markers]: https://docs.pytest.org/en/6.2.x/example/markers.html#working-with-custom-markers |
| 95 | + |
| 96 | +## Submitting your solution |
| 97 | + |
| 98 | +You can submit your solution using the `exercism submit black_jack.py` command. |
| 99 | +This command will upload your solution to the Exercism website and print the solution page's URL. |
| 100 | + |
| 101 | +It's possible to submit an incomplete solution which allows you to: |
| 102 | + |
| 103 | +- See how others have completed the exercise |
| 104 | +- Request help from a mentor |
| 105 | + |
| 106 | +## Need to get help? |
| 107 | + |
| 108 | +If you'd like help solving the exercise, check the following pages: |
| 109 | + |
| 110 | +- The [Python track's documentation](https://exercism.org/docs/tracks/python) |
| 111 | +- The [Python track's programming category on the forum](https://forum.exercism.org/c/programming/python) |
| 112 | +- [Exercism's programming category on the forum](https://forum.exercism.org/c/programming/5) |
| 113 | +- The [Frequently Asked Questions](https://exercism.org/docs/using/faqs) |
| 114 | + |
| 115 | +Should those resources not suffice, you could submit your (incomplete) solution to request mentoring. |
| 116 | + |
| 117 | +Below are some resources for getting help if you run into trouble: |
| 118 | + |
| 119 | +- [The PSF](https://www.python.org) hosts Python downloads, documentation, and community resources. |
| 120 | +- [The Exercism Community on Discord](https://exercism.org/r/discord) |
| 121 | +- [Python Community on Discord](https://pythondiscord.com/) is a very helpful and active community. |
| 122 | +- [/r/learnpython/](https://www.reddit.com/r/learnpython/) is a subreddit designed for Python learners. |
| 123 | +- [#python on Libera.chat](https://www.python.org/community/irc/) this is where the core developers for the language hang out and get work done. |
| 124 | +- [Python Community Forums](https://discuss.python.org/) |
| 125 | +- [Free Code Camp Community Forums](https://forum.freecodecamp.org/) |
| 126 | +- [CodeNewbie Community Help Tag](https://community.codenewbie.org/t/help) |
| 127 | +- [Pythontutor](http://pythontutor.com/) for stepping through small code snippets visually. |
| 128 | + |
| 129 | +Additionally, [StackOverflow](http://stackoverflow.com/questions/tagged/python) is a good spot to search for your problem/question to see if it has been answered already. |
| 130 | + If not - you can always [ask](https://stackoverflow.com/help/how-to-ask) or [answer](https://stackoverflow.com/help/how-to-answer) someone else's question. |
0 commit comments