Files

4.6 KiB

Contributing

Questions, Bugs, Enhancements / Suggestions

For questions, bug reports, and enhancement requests / suggestions, please use the GitHub issue tracker at https://github.com/ericblade/quagga2/issues

Chat / Real Time Communication?

We have a Gitter chat channel available at https://gitter.im/quaggaJS/Lobby . Please join us there, and be patient. Thanks!

Code

Developing enhancements to Quagga2

If you'd like to work directly on the Quagga2 code, it is quite easy to build a local development copy and get started hacking on the base code. Simply clone this repository, then run:

npm install
npm run build

Running tests

There are several tests included in Quagga2, in the test/ folder. Please make sure before you send in any pull requests, that you have run npm test against the existing tests, as well as implemented any tests that may be needed to test your new code. If you're not sure how to properly unit test your new code, then go ahead and make that pull request, and we'll try to help you before merging.

Test Structure:

  • Unit tests are in src/ alongside source files (.spec.ts files)
  • Integration tests are in test/integration/ organized by decoder type
  • See test/integration/README.md for detailed information about integration test structure and configuration

Running Specific Tests:

# All tests (Node unit/integration + full Cypress suite)
npm test

# Run Node and Cypress in parallel (faster local iteration)
npm run test:parallel

# Node tests only
npm run test:node

# Browser tests only (requires Cypress)
npm run test:browser-all

# E2E examples spec with server (headless)
npm run test:e2e

# E2E examples spec (interactive, Electron)
npm run test:e2e:open

# Cypress: run only specific spec(s)
# Pass --spec through npm using --
npm run cypress:run -- --spec cypress/e2e/browser.cy.ts

# Multiple specs (comma-separated)
npm run cypress:run -- --spec cypress/e2e/browser.cy.ts,cypress/e2e/integration.cy.ts

# Glob pattern
npm run cypress:run -- --spec "cypress/e2e/**/browser*.cy.ts"

# Open interactive runner
npm run cypress:open

# Open only the examples E2E spec (Electron)
npm run cypress:open:e2e

# Choose a browser (if installed)
npx cross-env NODE_ENV=development BUILD_ENV=development NODE_OPTIONS=--openssl-legacy-provider cypress run --browser chrome --env BUILD_ENV=development --spec cypress/e2e/browser.cy.ts

# Integration tests only (Node)
npx ts-mocha -p test/tsconfig.json test/integration/**/*.spec.ts

# Specific decoder integration tests
npx ts-mocha -p test/tsconfig.json test/integration/decoders/ean_8.spec.ts

Adding Integration Tests:

When adding new test cases to decoder integration tests, tests should pass in both Node and browser environments by default. If a test is known to fail in a specific environment, mark it explicitly with:

  • allowFailInNode: true - Test can fail in Node without failing CI
  • allowFailInBrowser: true - Test can fail in browser without failing CI
  • Both flags - Test can fail in both environments

See test/integration/README.md for complete details on the test failure marking system.

Notes:

  • The Cypress E2E examples (cypress/e2e/examples.cy.ts) require the local examples server on port 8080; the test, test:e2e, and test:e2e:open scripts start it automatically via start-server-and-test.
  • The parallel runner uses prefixed logs (e2e, node) and exits non-zero if either side fails (--kill-others-on-fail --success=all).

Working on a changed copy of Quagga2 from another repository (ie, developing an external plugin)

If you need to make changes to Quagga2 to support some external code (such as an external reader plugin), you will probably need to be able to test the code in your other repo. One such way to do that is to npm install @ericblade/quagga2 inside the external repo, which will initialize the module structure, and fill it with the current release of quagga2. Once that is completed, then copy the lib/quagga.js (node) and/or dist/quagga.js and/or dist/quagga.min.js files into ExternalRepo/node_modules/@ericblade/quagga2, preserving the "lib" or "dist" folder. Then your code will have the new changes that you have implemented in your copy of the quagga2 repo.

Pull requests

Please, submit pull requests! Open source works best when we all work together. If you find a change to be useful, the odds are that other users will, as well!

BE AWESOME

Don't forget to BE AWESOME.