{"id":24986938,"url":"https://github.com/danailminchev/gatsby-starter-testing","last_synced_at":"2025-07-24T16:17:23.133Z","repository":{"id":36973107,"uuid":"301854518","full_name":"DanailMinchev/gatsby-starter-testing","owner":"DanailMinchev","description":"A simple Gatsby starter with configured testing frameworks and tools for each layer of the The Testing Pyramid and more.","archived":false,"fork":false,"pushed_at":"2023-01-25T05:44:08.000Z","size":28649,"stargazers_count":10,"open_issues_count":54,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-04-11T23:37:02.542Z","etag":null,"topics":["axe","cypress","cypress-axe","cypress-snapshots","cypress-testing-library","end-to-end-testing","gatsby","gatsby-site","gatsby-starter","gatsby-starter-kit","gatsbyjs","jamstack","jest","jest-snapshots","netlify","react-testing-library","storybook","structural-testing","unit-testing","visual-testing"],"latest_commit_sha":null,"homepage":"https://gatsby-starter-testing.netlify.app","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/DanailMinchev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-10-06T21:05:34.000Z","updated_at":"2023-06-22T04:06:12.000Z","dependencies_parsed_at":"2023-02-14T05:15:48.721Z","dependency_job_id":null,"html_url":"https://github.com/DanailMinchev/gatsby-starter-testing","commit_stats":null,"previous_names":[],"tags_count":13,"template":true,"template_full_name":null,"purl":"pkg:github/DanailMinchev/gatsby-starter-testing","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DanailMinchev%2Fgatsby-starter-testing","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DanailMinchev%2Fgatsby-starter-testing/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DanailMinchev%2Fgatsby-starter-testing/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DanailMinchev%2Fgatsby-starter-testing/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/DanailMinchev","download_url":"https://codeload.github.com/DanailMinchev/gatsby-starter-testing/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DanailMinchev%2Fgatsby-starter-testing/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266870393,"owners_count":23998246,"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","status":"online","status_checked_at":"2025-07-24T02:00:09.469Z","response_time":99,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["axe","cypress","cypress-axe","cypress-snapshots","cypress-testing-library","end-to-end-testing","gatsby","gatsby-site","gatsby-starter","gatsby-starter-kit","gatsbyjs","jamstack","jest","jest-snapshots","netlify","react-testing-library","storybook","structural-testing","unit-testing","visual-testing"],"created_at":"2025-02-04T11:34:03.126Z","updated_at":"2025-07-24T16:17:22.335Z","avatar_url":"https://github.com/DanailMinchev.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://www.gatsbyjs.com/\"\u003e\n    \u003cimg alt=\"Gatsby\" src=\"https://www.gatsbyjs.com/Gatsby-Monogram.svg\" width=\"64\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\u003ch1 align=\"center\"\u003e\n  Gatsby Testing Starter\n\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/DanailMinchev/gatsby-starter-testing/blob/master/LICENSE\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/license-MIT-blue.svg\" alt=\"Project is released under the MIT license.\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/DanailMinchev/gatsby-starter-testing/blob/master/CONTRIBUTING.md\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\" alt=\"PRs welcome!\" /\u003e\n  \u003c/a\u003e\n  \u003cbr /\u003e\n  \u003ca href=\"https://github.com/DanailMinchev/gatsby-starter-testing/actions\"\u003e\n    \u003cimg src=\"https://github.com/DanailMinchev/gatsby-starter-testing/workflows/CI/badge.svg?branch=master\" alt=\"GitHub Actions status\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://codecov.io/gh/DanailMinchev/gatsby-starter-testing\"\u003e\n    \u003cimg src=\"https://codecov.io/gh/DanailMinchev/gatsby-starter-testing/branch/master/graph/badge.svg\" alt=\"Codecov status\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://app.fossa.com/projects/git%2Bgithub.com%2FDanailMinchev%2Fgatsby-starter-testing?ref=badge_shield\"\u003e\n    \u003cimg src=\"https://app.fossa.com/api/projects/git%2Bgithub.com%2FDanailMinchev%2Fgatsby-starter-testing.svg?type=shield\" alt=\"FOSSA Status\" /\u003e\n  \u003c/a\u003e\n  \u003cbr /\u003e\n  \u003ca href=\"https://github.com/prettier/prettier\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/code_style-prettier-ff69b4.svg?style=flat-square\" alt=\"code style: prettier\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://www.conventionalcommits.org/\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg\" alt=\"Conventional Commits\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/semantic-release/semantic-release\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg\" alt=\"semantic-release\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\nKick off your project with this default boilerplate. This starter ships with configured testing frameworks and tools for each layer of the Test Pyramid and more.\n\n- Unit Testing: [Jest](https://jestjs.io/) with [React Testing Library](https://testing-library.com/docs/react-testing-library/intro)\n\n- Structural Testing: [Jest Snapshot Testing](https://jestjs.io/docs/en/snapshot-testing)\n\n- End-to-End Testing: [Cypress](https://www.cypress.io/) with [Cypress Testing Library](https://testing-library.com/docs/cypress-testing-library/intro)\n\n- Accessibility Testing: [axe](https://www.deque.com/axe/) with [cypress-axe](https://github.com/avanslaars/cypress-axe)\n\n- Automated Visual Testing:\n  - [Storybook](https://storybook.js.org/) with [jest-puppeteer](https://github.com/smooth-code/jest-puppeteer) and [jest-image-snapshot](https://github.com/americanexpress/jest-image-snapshot)\n  - [Cypress](https://www.cypress.io/) with [Cypress Image Snapshot](https://github.com/palmerhq/cypress-image-snapshot)\n\n## Contents\n\n- [🚀 Quick start](#-quick-start)\n- [✅ Writing tests](#-writing-tests)\n- [✅ Automated Visual Testing](#-automated-visual-testing)\n- [⚙️ GitHub Actions integration](#%EF%B8%8F-github-actions-integration)\n- [⚙️ Netlify integration](#%EF%B8%8F-netlify-integration)\n- [⚙️ Codecov integration](#%EF%B8%8F-codecov-integration)\n- [⚙️ FOSSA integration](#%EF%B8%8F-fossa-integration)\n- [🧐 What's inside?](#-whats-inside)\n\n## 🚀 Quick start\n\n1.  **Create a Gatsby site.**\n\n    Use the Gatsby CLI to create a new site, specifying the starter.\n\n    ```shell\n    npm install -g gatsby-cli\n    gatsby new my-testing-starter https://github.com/DanailMinchev/gatsby-starter-testing\n    ```\n\n    or\n\n    ```shell\n    npx --force gatsby new my-testing-starter https://github.com/DanailMinchev/gatsby-starter-testing\n    ```\n\n2.  **Install dependencies.**\n\n    Navigate into your new site's directory and install dependencies.\n\n    ```shell\n    cd my-testing-starter/\n    npm ci\n    ```\n\n3.  **Run unit and structural tests.**\n\n    After installing dependencies using `npm ci`, you can run the unit and structural tests in your site's directory.\n\n    ```shell\n    npm run test\n    ```\n\n    or you can run them in \"watch\" mode:\n\n    ```shell\n    npm run test:watch\n    ```\n\n    and you can update the Jest snapshots:\n\n    ```shell\n    npm run test:update\n    ```\n\n4.  **Run e2e (end-to-end), accessibility and visual tests using Cypress.**\n\n    After installing dependencies using `npm ci`, you need to build the project to run e2e tests in `ci` mode.\n\n    ```shell\n    npm run build\n    ```\n\n    Then, you can run the tests using `test:e2e` which will run in `ci` mode:\n\n    ```shell\n    npm run test:e2e\n    ```\n\n    Corresponding option to update image snapshots in this mode:\n\n    ```shell\n    npm run test:e2e:update\n    ```\n\n    You can run e2e tests explicitly in `dev` mode with hot reloading:\n\n    ```shell\n    npm run test:e2e:dev\n    ```\n\n    Corresponding option to update image snapshots in this mode:\n\n    ```shell\n    npm run test:e2e:dev:update\n    ```\n\n    You can run e2e tests explicitly in `ci` mode, the same way as it runs on your Continuous Integration (CI) platform:\n\n    ```shell\n    npm run test:e2e:ci\n    ```\n\n    Corresponding option to update image snapshots in this mode:\n\n    ```shell\n    npm run test:e2e:ci:update\n    ```\n\n5.  **Run e2e (end-to-end), accessibility and visual tests using Cypress running in Docker.**\n\n    You should have `XQuartz` installed and configured as described in [Running GUI applications using Docker for Mac](https://sourabhbajaj.com/blog/2017/02/07/gui-applications-docker-mac/)\n    in case you would like to use `Cypress Test Runner` running in Docker on `macOS`.\n\n    To run Cypress in Docker you can use similar commands as in point 4, but append `:docker` in the end.\n\n    You can run the tests using `test:e2e:docker` which will run in `ci` mode.\n\n    The `test:e2e:docker` command is working only on macOS and before running it you should run `. docker/setupXQuartz.sh`:\n\n    ```shell\n    . docker/setupXQuartz.sh\n    npm run test:e2e:docker\n    ```\n\n    Corresponding option to update image snapshots in this mode:\n\n    ```shell\n    . docker/setupXQuartz.sh\n    npm run test:e2e:docker:update\n    ```\n\n    You can run e2e tests explicitly in `dev` mode with hot reloading.\n\n    The `test:e2e:dev:docker` command is working only on macOS and before running it you should run `. docker/setupXQuartz.sh`:\n\n    ```shell\n    . docker/setupXQuartz.sh\n    npm run test:e2e:dev:docker\n    ```\n\n    Corresponding option to update image snapshots in this mode:\n\n    ```shell\n    . docker/setupXQuartz.sh\n    npm run test:e2e:dev:docker:update\n    ```\n\n    You can run e2e tests explicitly in `ci` mode, the same way as it runs on your Continuous Integration (CI) platform:\n\n    ```shell\n    npm run test:e2e:ci:docker\n    ```\n\n    Corresponding option to update image snapshots in this mode:\n\n    ```shell\n    npm run test:e2e:ci:docker:update\n    ```\n\n6.  **Run automated visual tests.**\n\n    After installing dependencies using `npm ci`, you need to build the project to run Storybook and visual tests.\n\n    ```shell\n    npm run build\n    ```\n\n    Then, you can run the tests using `test:visual` which will start [Storybook](https://storybook.js.org/) and [Puppeteer](https://github.com/puppeteer/puppeteer):\n\n    ```shell\n    npm run test:visual\n    ```\n\n    and you can update the Jest image snapshots:\n\n    ```shell\n    npm run test:visual:update\n    ```\n\n7.  **Run automated visual tests in Docker.**\n\n    To run automated visual tests in Docker you can use similar commands as in point 6, but append `:docker` in the end.\n\n    You can run the tests using `test:visual:docker` which will start [Storybook](https://storybook.js.org/) and [Puppeteer](https://github.com/puppeteer/puppeteer) in Docker:\n\n    ```shell\n    npm run test:visual:docker\n    ```\n\n    and you can update the Jest image snapshots:\n\n    ```shell\n    npm run test:visual:docker:update\n    ```\n\n8.  **Start developing.**\n\n    Navigate into your new site's directory and start the app using `develop` or `start` script,\n    or if you prefer you can start it together with e2e tests in watch mode:\n\n    ```shell\n    cd my-testing-starter/\n    npm run test:e2e:dev\n    ```\n\n    and you can start unit tests in watch mode in another terminal:\n\n    ```shell\n    npm run test:watch\n    ```\n\n9.  **Open the source code and start editing!**\n\n    Your site is now running at [http://localhost:8000/](http://localhost:8000/)!\n\n    Open the `my-testing-starter` directory in your code editor of choice and edit `src/pages/index.js`.\n    Save your changes and the browser will update in real time.\n    The unit tests will re-run automatically and Cypress will reload the app so that you can re-trigger the Cypress tests.\n\n10. **Git Hooks.**\n\n    This project is using git hooks which are configured with [Husky](https://github.com/typicode/husky).\n\n    To enable Git hooks, install Husky manually:\n\n    ```shell\n    npx husky install\n    ```\n\n    **\"pre-commit\" git hook**\n\n    This hook is configured to format your code with [Prettier](https://prettier.io/) and [lint-staged](https://github.com/okonet/lint-staged).\n    When new files are staged and committed they will be formatted same way as `npm run format` command.\n\n    **\"commit-msg\" git hook**\n\n    Your commit messages must be compatible with [Conventional Commits](https://www.conventionalcommits.org/) specification.\n    [commitlint](https://github.com/conventional-changelog/commitlint) is configured to make sure this specification is enforced.\n    You can use `npm run commit` command to commit your changes which is using [prompt](https://github.com/conventional-changelog/commitlint/tree/master/@commitlint/prompt-cli) to create the commit messages.\n\n## ✅ Writing tests\n\nThere are few conventions when writing tests.\n\n1.  **Automated Visual Testing and Storybook.**\n\n    You can write your Storybook stories in `/stories/` directory and later you can write visual tests in `__visual_tests__/` directories.\n    More information can be found [here](https://storybook.js.org/docs/testing/automated-visual-testing/#example-using-puppeteer-and-jest).\n\n## ✅ Automated Visual Testing\n\nThere are two options for Automated Visual Testing:\n\n- [Storybook](https://storybook.js.org/) with [jest-puppeteer](https://github.com/smooth-code/jest-puppeteer) and [jest-image-snapshot](https://github.com/americanexpress/jest-image-snapshot)\n- [Cypress](https://www.cypress.io/) with [Cypress Image Snapshot](https://github.com/palmerhq/cypress-image-snapshot)\n\nWhen creating the screenshots (image snapshots) there might be differences in font size or other platform specific rendering in the browser when running locally and on [CI](https://github.com/features/actions).\n\nThat is why it is better to run the visual tests inside [Docker](https://www.docker.com/), so that the same platform and browser is used locally and on CI.\n\nFor macOS users there is an option to run [Cypress Test Runner](https://docs.cypress.io/guides/core-concepts/test-runner.html#Overview) inside Docker as well.\n\nPlease see following articles:\n\n- [Running GUI applications using Docker for Mac](https://sourabhbajaj.com/blog/2017/02/07/gui-applications-docker-mac/)\n- [Run Cypress with a single Docker command](https://www.cypress.io/blog/2019/05/02/run-cypress-with-a-single-docker-command/)\n\n## ⚙️ GitHub Actions integration\n\nThere are currently 3 GitHub Actions workflows:\n\n- [CI](./.github/workflows/ci.yml)\n  This workflow is acting as CI pipeline.\u003cbr /\u003e\n  It is using `main_build_environment` environment (needs to be created).\n\n- [Pull Request](./.github/workflows/pull-request.yml)\n  This workflow runs when a new Pull Request is created or modified. It is similar to `CI` workflow.\u003cbr /\u003e\n  It is using `pr_build_environment` environment (needs to be created).\u003cbr /\u003e\n  The `pr_build_environment` environment can be setup to have [required reviewers](https://docs.github.com/en/actions/reference/environments#required-reviewers), so that the build is not triggered automatically.\n\n- [Deploy](./.github/workflows/deploy.yml)\n  This workflow can be used to deploy latest `master` branch or specific commit to Netlify. Use this to deploy to preview, uat, prod.\n\n- [Release](./.github/workflows/release.yml)\n  This workflow can be used to create new release automatically.\n\n  It will run all the tests as in [CI](./.github/workflows/ci.yml) workflow, it will create git release tag, new GitHub release and deploy to Netlify's UAT url.\n\n  Make sure to edit [package.json and repository.url property](https://github.com/DanailMinchev/gatsby-starter-testing/blob/65398ad26afbb0604ae699811a2b5e09632b4099/package.json#L133) so that [semantic-release](https://semantic-release.gitbook.io/) works properly.\n\n## ⚙️ Netlify integration\n\nThis app defines Netlify configuration in [netlify.toml](./netlify.toml) file.\n\nCurrently, the build and deploy process is done via [GitHub Actions integration](##%EF%B8%8F-github-actions-integration) instead of [Netlify Build](https://www.netlify.com/products/build/).\n\n[Netlify Edge](https://www.netlify.com/products/edge/) is used to host the resources which are build and deployed by [GitHub Actions integration](##%EF%B8%8F-github-actions-integration).\n\n### Netlify configuration\n\nConnect the repository to Netlify by following [Deploy with Git](https://docs.netlify.com/site-deploys/create-deploys/#deploy-with-git) documentation.\n\nYou need to stop Netlify builds as described [here](https://docs.netlify.com/configure-builds/stop-or-activate-builds/#stop-builds).\n\n### Netlify GitHub configuration\n\nYou need to configure [GitHub encrypted secrets](https://docs.github.com/en/free-pro-team@latest/actions/reference/encrypted-secrets#creating-encrypted-secrets-for-a-repository) for [GitHub Actions](##%EF%B8%8F-github-actions-integration) to be able to deploy the app.\n\nFollow the steps below:\n\n1. Register a new `Netlify personal access token` as described in [Obtain a token in the Netlify UI](https://docs.netlify.com/cli/get-started/#obtain-a-token-in-the-netlify-ui) document. Copy the value.\n2. Register a new `GitHub encrypted secret` as described in [Creating encrypted secrets for a repository](https://docs.github.com/en/free-pro-team@latest/actions/reference/encrypted-secrets#creating-encrypted-secrets-for-a-repository).\n   - `Name`: `NETLIFY_AUTH_TOKEN`\n   - `Value`: the personal access token value from step 1.\n3. Register a new `GitHub encrypted secret` as described in [Creating encrypted secrets for a repository](https://docs.github.com/en/free-pro-team@latest/actions/reference/encrypted-secrets#creating-encrypted-secrets-for-a-repository).\n   - `Name`: `NETLIFY_SITE_ID`\n   - `Value`: from the Netlify site dashboard, go to `Settings \u003e General \u003e Site details \u003e Site information`, and copy the value. More information [here](https://docs.netlify.com/cli/get-started/#link-with-an-environment-variable).\n\n### Netlify deployments - GitHub Actions\n\nPlease see [GitHub Actions integration](##%EF%B8%8F-github-actions-integration) section for more information about the available options.\n\n### Netlify deployments - Local machine\n\nTo set up your local machine with Netlify ([deployments](https://www.netlify.com/products/edge/) and [live dev](https://www.netlify.com/products/dev/)) follow the steps below:\n\n1. Copy [.env.example](./.env.example) file and name it `.env`:\n   ```\n   cp .env.example .env\n   ```\n2. Register a new `Netlify personal access token` as described in [Obtain a token in the Netlify UI](https://docs.netlify.com/cli/get-started/#obtain-a-token-in-the-netlify-ui) document. Copy the value.\n3. Edit the `.env` file and add the token from step 2 to the `NETLIFY_AUTH_TOKEN` variable.\n   ```\n   NETLIFY_AUTH_TOKEN=your-token-value-from-step-2-here\n   ```\n4. From the Netlify site dashboard, go to `Settings \u003e General \u003e Site details \u003e Site information`, and copy the `API ID` value as described in [Link with an environment variable](https://docs.netlify.com/cli/get-started/#link-with-an-environment-variable).\n5. Edit the `.env` file and add the app id value from step 4 to the `NETLIFY_SITE_ID` variable.\n   ```\n   NETLIFY_SITE_ID=your-app-id-value-from-step-4-here\n   ```\n\nNow you should be able to interact with Netlify platform from your local machine.\n\nYou can use following npm scripts with Netlify:\n\n- `npm run develop:netlify`\n  This will run local Netlify server on [http://localhost:8888](http://localhost:8888).\n- `npm run develop:netlify:live`\n  This will run local Netlify server with Live Share.\n- `npm run deploy:preview`\n  This will deploy the current local build to Draft url.\n- `npm run deploy:uat`\n  This will deploy the current local build to UAT url.\n- `npm run deploy:prod`\n  This will deploy the current local build to PRODUCTION url.\n\n## ⚙️ Codecov integration\n\nFollow the steps below:\n\n1. Copy the `Upload token` as described in the [documentation](https://docs.codecov.io/docs/about-the-codecov-bash-uploader#upload-token). Copy the value.\n2. Register a new `GitHub encrypted secret` as described in [Creating encrypted secrets for a repository](https://docs.github.com/en/free-pro-team@latest/actions/reference/encrypted-secrets#creating-encrypted-secrets-for-a-repository).\n   - `Name`: `CODECOV_TOKEN`\n   - `Value`: the personal access token value from step 1.\n\nYou can configure Codecov in [codecov.yml](./codecov.yml) file.\n\n## ⚙️ FOSSA integration\n\nPlease follow [official documentation](https://docs.fossa.com/docs/quick-import).\n\n## 🧐 What's inside?\n\nA quick look at the top-level files and directories you'll see in a Gatsby project.\n\n    .\n    ├── .cache\n    ├── .circleci\n    ├── .github\n    ├── .storybook\n    ├── __mocks__\n    ├── coverage\n    ├── cypress\n    ├── docker\n    ├── node_modules\n    ├── public\n    ├── src\n    ├── static\n    ├── stories\n    ├── storybook-static\n    ├── .dockerignore\n    ├── .gitattributes\n    ├── .gitignore\n    ├── .npmrc\n    ├── .nvmrc\n    ├── .prettierignore\n    ├── .prettierrc\n    ├── app.Dockerfile\n    ├── CODE_OF_CONDUCT.md\n    ├── commitlint.config.js\n    ├── CONTRIBUTING.md\n    ├── cypress.json\n    ├── gatsby-browser.js\n    ├── gatsby-config.js\n    ├── gatsby-node.js\n    ├── gatsby-ssr.js\n    ├── jest.config.js\n    ├── jest.setup.js\n    ├── jest.visual.config.js\n    ├── jest-loadershim.js\n    ├── jest-preprocess.js\n    ├── jest-puppeteer.config.js\n    ├── LICENSE\n    ├── package.json\n    ├── package-lock.json\n    ├── README.md\n    └── test.Dockerfile\n\n1. **`.cache`**: This directory is autogenerated. This directory is internal to Gatsby used for caching.\n\n2. **`.circleci`**: This directory is used by [CircleCI](https://circleci.com/) to build and test the project. The pipeline is defined in [.circleci/config.yml](.circleci/config.yml) file.\n\n3. **`.github`**: This directory is used by [GitHub](https://github.com/). Currently, it has [Dependabot](.github/dependabot.yml) and [GitHub Actions](.github/workflows/ci.yml) files.\n\n4. **`.storybook`**: This directory is used by [Storybook](https://storybook.js.org/) to store the configuration and setup as described [here](https://storybook.js.org/docs/configurations/overview/).\n\n5. **`__mocks__`**: This directory is used by [Jest](https://jestjs.io/) to store various mocks as described [here](https://jestjs.io/docs/en/manual-mocks).\n\n6. **`coverage`**: This directory is autogenerated. This directory is generated by [Jest](https://jestjs.io/) when running the tests and has test coverage reports.\n\n7. **`cypress`**: This directory is used by [Cypress](https://www.cypress.io/) to store Cypress tests, fixtures, plugins and test artifacts (Cypress screenshots and videos) as described [here](https://docs.cypress.io/guides/core-concepts/writing-and-organizing-tests.html). The Cypress tests are located in `/cypress/e2e` directory.\n\n8. **`docker`**: This directory is used by [Docker Compose](https://docs.docker.com/compose/) to run Docker containers used mainly for `Automated Visual Testing`.\n\n9. **`node_modules`**: This directory is autogenerated when you run `npm run ci`. This directory contains all of the modules of code that your project depends on (npm packages) are automatically installed.\n\n10. **`public`**: This directory is autogenerated when you run `npm run build`. This directory contains all of your application code and assets which can be deployed to production.\n\n11. **`src`**: This directory will contain the source code of your application.\n\n12. **`static`**: This directory will contain various assets which will be added to `public/` directory automatically when build the project. More information can be found [here](https://www.gatsbyjs.org/docs/static-folder/).\n\n13. **`stories`**: This directory will contain various [stories](https://storybook.js.org/docs/basics/writing-stories/) for your application used by [Storybook](https://storybook.js.org/) as well as used for `Automated Visual Testing`.\n\n14. **`storybook-static`**: This directory is autogenerated when you run `npm run build-storybook`. This directory will contain [Storybook](https://storybook.js.org/) application shipped with various [stories](https://storybook.js.org/docs/basics/writing-stories/). The directory can be shared or deployed within the team.\n\n15. **`.dockerignore`**: This file tells [Docker](https://docs.docker.com/engine/reference/builder/#dockerignore-file) which files it should not send to Docker daemon when building the Docker images.\n\n16. **`.gitattributes`**: This file is used by [Git](https://git-scm.com/) to define attributes to pathnames.\n\n17. **`.gitignore`**: This file tells [Git](https://git-scm.com/) which files it should not track / not maintain a version history for.\n\n18. **`.npmrc`**: This file is used by [npm](https://docs.npmjs.com/cli/v7/configuring-npm/npmrc) to set npm options.\n\n19. **`.nvmrc`**: This file is used by [nvm](https://github.com/nvm-sh/nvm) to use the correct Node.js version for this application.\n\n20. **`.prettierignore`**: This file tells [Prettier](https://prettier.io/) which files it should not format.\n\n21. **`.prettierrc`**: This is a configuration file for [Prettier](https://prettier.io/). Prettier is a tool to help keep the formatting of your code consistent.\n\n22. **`app.Dockerfile`**: This file is used by [Docker](https://docs.docker.com/engine/reference/builder/) and defines the Docker image for the app.\n\n23. **`CODE_OF_CONDUCT.md`**: \"Contributor Code of Conduct\" document.\n\n24. **`commitlint.config.js`**: This is a configuration file for [commitlint](https://github.com/conventional-changelog/commitlint).\n\n25. **`CONTRIBUTING.md`**: \"Contributing\" document.\n\n26. **`cypress.json`**: This is a configuration file for [Cypress](https://www.cypress.io/). More information can be found [here](https://docs.cypress.io/guides/references/configuration.html).\n\n27. **`gatsby-browser.js`**: This file is where Gatsby expects to find any usage of the [Gatsby browser APIs](https://www.gatsbyjs.org/docs/browser-apis/) (if any). These allow customization/extension of default Gatsby settings affecting the browser.\n\n28. **`gatsby-config.js`**: This is the main configuration file for a Gatsby site. This is where you can specify information about your site (metadata) like the site title and description, which Gatsby plugins you'd like to include, etc. (Check out the [config docs](https://www.gatsbyjs.org/docs/gatsby-config/) for more detail).\n\n29. **`gatsby-node.js`**: This file is where Gatsby expects to find any usage of the [Gatsby Node APIs](https://www.gatsbyjs.org/docs/node-apis/) (if any). These allow customization/extension of default Gatsby settings affecting pieces of the site build process.\n\n30. **`gatsby-ssr.js`**: This file is where Gatsby expects to find any usage of the [Gatsby server-side rendering APIs](https://www.gatsbyjs.org/docs/ssr-apis/) (if any). These allow customization of default Gatsby settings affecting server-side rendering.\n\n31. **`jest.config.js`**: This is a configuration file for [Jest](https://jestjs.io/) and it is used when you run `npm run test` for `Unit Testing` and `Structural Testing`. More information can be found [here](https://www.gatsbyjs.org/docs/unit-testing/) and [here](https://jestjs.io/docs/en/configuration).\n\n32. **`jest.setup.js`**: This is a setup file for [Jest](https://jestjs.io/) that runs some code to configure or set up the testing framework before each test file in the suite while it is executed. More information can be found [here](https://jestjs.io/docs/en/configuration#setupfilesafterenv-array).\n\n33. **`jest.visual.config.js`**: This is a configuration file for [Jest](https://jestjs.io/) and it is used when you run `npm run test:visual` for `Automated Visual Testing`. More information can be found [here](https://www.gatsbyjs.org/docs/unit-testing/) and [here](https://jestjs.io/docs/en/configuration).\n\n34. **`jest-loadershim.js`**: This is a setup file for [Jest](https://jestjs.io/) and it is used to configure or set up the testing environment. More information can be found [here](https://jestjs.io/docs/en/configuration#setupfiles-array).\n\n35. **`jest-preprocess.js`**: This is a setup file for [Jest](https://jestjs.io/) that defines transformers. More information can be found [here](https://jestjs.io/docs/en/configuration#transform-objectstring-pathtotransformer--pathtotransformer-object).\n\n36. **`jest-puppeteer.config.js`**: This is a configuration file for [jest-puppeteer](https://github.com/smooth-code/jest-puppeteer) and it is used when you run `npm run test:visual` for `Automated Visual Testing`. More information can be found [here](https://storybook.js.org/docs/testing/automated-visual-testing/#example-using-puppeteer-and-jest).\n\n37. **`LICENSE`**: Gatsby is licensed under the MIT license.\n\n38. **`package.json`**: A manifest file for Node.js projects, which includes things like metadata (the project's name, author, etc). This manifest is how npm knows which packages to install for your project.\n\n39. **`package-lock.json`** (See `package.json` above, first). This is an automatically generated file based on the exact versions of your npm dependencies that were installed for your project. **(You won't change this file directly).**\n\n40. **`README.md`**: A text file containing useful reference information about your project.\n\n41. **`test.Dockerfile`**: This file is used by [Docker](https://docs.docker.com/engine/reference/builder/) and defines the Docker image for `Automated Visual Testing`.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdanailminchev%2Fgatsby-starter-testing","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdanailminchev%2Fgatsby-starter-testing","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdanailminchev%2Fgatsby-starter-testing/lists"}