# Intern

Software testing for humans

[![Build Status](https://travis-ci.org/theintern/intern.svg?branch=master)](https://travis-ci.org/theintern/intern)
[![codecov](https://codecov.io/gh/theintern/intern/branch/master/graph/badge.svg)](https://codecov.io/gh/theintern/intern)
[![Average time to resolve an issue](http://isitmaintained.com/badge/resolution/theintern/intern.svg)](http://isitmaintained.com/project/theintern/intern "Average time to resolve an issue")
[![Percentage of issues still open](http://isitmaintained.com/badge/open/theintern/intern.svg)](http://isitmaintained.com/project/theintern/intern "Percentage of issues still open")
[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bhttps%3A%2F%2Fgithub.com%2Ftheintern%2Fintern.svg?type=shield)](https://app.fossa.io/projects/git%2Bhttps%3A%2F%2Fgithub.com%2Ftheintern%2Fintern?ref=badge_shield)

<br><p align="center"><img src="https://cdn.rawgit.com/theintern/intern/master/docs/logo.svg" alt="Intern logo" height="128"></p><br>

Intern is a complete test system for JavaScript designed to help you write and run consistent, high-quality test cases for your JavaScript libraries and applications. It can be used to test _any_ JavaScript code.

* Plain JavaScript code, in any module format (or no module format!)
* Web pages generated by server-side languages (like Java, PHP, or Ruby)
* Native or hybrid iOS, Android, and Firefox OS applications

Intern is minimally prescriptive and enforces only a basic set of best practices designed to ensure your tests stay maintainable over time. Its extensible architecture allows you to write custom test interfaces, executors, and reporters to influence how your tests run & easily integrate with your existing coding environment. Intern also comes with Grunt tasks so it can be quickly added to existing Grunt-based workflows, and is designed to work out-of-the-box with popular continuous integration services like Jenkins and Travis CI.

If you’re into name-dropping, Intern gets used every day by teams at Twitter, Stripe, Mozilla, IBM, Marriott, Philips, Zenput, Alfresco, Esri, HSBC, ING, Intuit, and more. It’s also the testing framework of choice for [growing numbers of open-source projects](https://github.com/search?p=2&q=tests+filename%3Aintern.js&ref=searchresults&type=Code&utf8=%E2%9C%93).

**Note that this documentation is for Intern 4 master, which is currently an alpha release.**

* For the latest stable (Intern 3) release docs, please see [the Intern Guide](https://theintern.github.io/intern).
* For the latest unstable (Intern 4) release docs, please see [the release README](https://github.com/theintern/intern/tree/4.0.0-alpha.5).

## Quick start

1. Install from npm

    ```sh
    $ cd /my/project
    $ npm install intern@next
    ```

2. Create an `intern.json` file in your project root.

    ```js
    {
      "suites": "tests/unit/**/*.js"
    }
    ```

3. Verify that your configuration works by running Intern and checking that no errors are output.

    ```sh
    $ ./node_modules/.bin/intern
    ```

4. Start [writing tests](docs/writing_tests.md)!

## TypeScript setup

Intern installs a global variable that tests may not be aware of if nothing imports the base `intern` package. Also, Intern includes typings for several packages that haven’t made it onto DefinitelyTyped yet (and so can’t be installed as @types packages). To ensure all the necessary types are loaded, add the following statements to your `tsconfig.json`:

```js
{
    "typeRoots": [
        "./node_modules/@types",
        "./node_modules/intern/types"
    ],
    "types": [
        "intern"
    ]
}
```

## Compatibility

Intern can run unit tests in browsers that support ECMAScript 5, including mobile browsers on Android and iOS, and in Node 4+. It’s self-tests run against IE 10 and 11, Firefox 33 and current, Chrome 38 and current, and Safari 9 and 10, as well as Node 6 and 7.

Intern can run functional tests using WebDriver-compatible applications and services, including Selenium, Appium, Selendroid. It has built-in support for cloud testing services from [BrowserStack](https://browserstack.com), [CrossBrowserTesting](https://crossbrowsertesting.com), [SauceLabs](https://saucelabs.com), and [TestingBot](https://testingbot.com).

## More information

* [Getting started](docs/getting_started.md) - Setting up Intern to test a project
* [How To](docs/how_to.md) - Quick answers to common questions
* [Concepts](docs/concepts.md) - General testing concepts and definitions
* [Architecture](docs/architecture.md) - How Intern is organized
* [Configuration](docs/configuration.md) - How to configure Intern
* [Writing tests](docs/writing_tests.md) - The various ways of writing tests with Intern
* [Running](docs/running.md) - How to run Intern
* [Extending](docs/extending.md) - Extending Intern
* [API](docs/api.md) - Intern's API
* [Developing](docs/developing.md) - For Intern developers
* [Contributing](CONTRIBUTING.md) - How to contribute to Intern development

## Get help

The best place to ask questions and get answers about Intern is Stack Overflow. Just tag your question with `intern`. If you have more immediate questions, or just want to chat with other people interested in Intern, there’s an `#intern` IRC channel on freenode, and a Gitter room at [theintern/intern](https://gitter.im/theintern/intern). See the [Help](docs/help.md) page for more information.

## License

Intern is a JS Foundation project offered under the [New BSD](LICENSE) license.

[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bhttps%3A%2F%2Fgithub.com%2Ftheintern%2Fintern.svg?type=large)](https://app.fossa.io/projects/git%2Bhttps%3A%2F%2Fgithub.com%2Ftheintern%2Fintern?ref=badge_large)

© [SitePen, Inc.](http://sitepen.com) and its [contributors](https://github.com/theintern/intern/graphs/contributors)

<p align="center">Intern’s self-tests run on<br>
<a href="https://browserstack.com"><img alt="BrowserStack logo" src="https://theintern.github.io/images/browserstack.svg" height="32" align="middle"></a></p>
