{"id":14954602,"url":"https://github.com/meteor/e2e","last_synced_at":"2025-10-19T22:30:15.160Z","repository":{"id":24133641,"uuid":"27522656","full_name":"meteor/e2e","owner":"meteor","description":"End-to-end tests for Meteor's release process","archived":false,"fork":false,"pushed_at":"2015-09-16T16:08:33.000Z","size":483,"stargazers_count":22,"open_issues_count":1,"forks_count":6,"subscribers_count":20,"default_branch":"master","last_synced_at":"2025-01-28T23:44:13.520Z","etag":null,"topics":[],"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/meteor.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}},"created_at":"2014-12-04T04:16:14.000Z","updated_at":"2021-12-23T15:11:58.000Z","dependencies_parsed_at":"2022-08-22T11:41:07.290Z","dependency_job_id":null,"html_url":"https://github.com/meteor/e2e","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/meteor%2Fe2e","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/meteor%2Fe2e/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/meteor%2Fe2e/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/meteor%2Fe2e/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/meteor","download_url":"https://codeload.github.com/meteor/e2e/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":237221176,"owners_count":19274447,"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":[],"created_at":"2024-09-24T13:04:24.628Z","updated_at":"2025-10-19T22:30:14.526Z","avatar_url":"https://github.com/meteor.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Meteor E2E Tests\n\n## Running Tests\n\n```\n  Usage:\n\n    export SAUCE_LABS_ACCESS_KEY=...    # Find values in 1Password under \"e2e\"\n    export OAUTH_PROVIDERS_PASSWORD=...\n    export OAUTH_PROVIDER_SECRETS=...\n\n    node run [files ...] [--local] [--browsers=all] [--concurrency=5]\n\n  Options:\n\n    files           Files to run in `specs/`. If it's a directory, will\n                    search all files recursively. Defaults to 'specs/'.\n\n    --local         Run the tests against a local selenium server.\n\n    --browsers      List of browsers to launch. Defaults to all browsers listed\n                    in `config.js`. You can also list individual browsers like \n                    this: `--browsers=chrome,firefox`, or you can add your \n                    custom list to `exports.browserLists` in `config.js`.\n\n    --concurrency   Maximum number of browsers to launch at the same time. The\n                    default is what we have on our SauceLabs account.\n```\n\n## Test Authoring\n\nAll test files should be located in `specs/`. Don't place test fixtures and\nhelpers in there - put them in `fixtures/`. The tests are run with Mocha using a\ncustom interface, so each spec (the `it()` block) is run inside a fiber. We have\nalso wrapped methods on the wd (SauceLabs' official Node.js selenium webdriver\nbridge) browser instance to let them run synchronously if you don't pass a\ncallback as the last argument (without blocking the event loop).\n\nWhen tests are run, a wd browser instance will already be instantiated for you\nand available globally as `browser`. For assertions we are using\n[Chai](http://chaijs.com/api/bdd/) with `chai.expect` available globally.\n\nThe result is that your tests could look like this (isn't it nice?):\n\n``` js\n// specs/test/test_spec.js\ndescribe('Google', function () {\n\n  it('should have the correct title', function () {\n    browser.get('http://www.google.com');\n    expect(browser.title()).to.contain('Google');\n  });\n\n});\n```\n\n## Working on the Test Runner\n\nThere are several parts:\n\n- `lib/master.js`: the master script that launches child runner processes for\n  each browser we want the tests to be run against.\n- `lib/test_runner.js`: a child runner process that loads Mocha and runs tests\n  against a single browser. It communicates to the master script via stdout.\n- `lib/test_interface.js`: a custom mocha interface that runs all tests inside\n   fibers.\n- `lib/test_env.js`: sets up the environment in which tests are run (globals,\n  custom helpers, etc.)\n- `lib/reporter.js`: where we react to test progress events emitted from child\n  processes (e.g. print to console, send to server, etc.)\n- `config.js`: SauceLabs credentials, browser lists, etc.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmeteor%2Fe2e","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmeteor%2Fe2e","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmeteor%2Fe2e/lists"}