{"_id":"55a46f45e75ca60d00a39323","version":{"_id":"559b65bd8b04e90d00702d57","project":"559b65bd8b04e90d00702d54","__v":6,"createdAt":"2015-07-07T05:38:05.890Z","releaseDate":"2015-07-07T05:38:05.890Z","categories":["559b65be8b04e90d00702d58","55a46e7468c7e20d0036d4d1","55a4971be6c2470d002a6483","55a4a690e10ba50d00b40bba","55a4bcf31a5f991700a94066","56cf5c8d336aa60b0086a40d"],"is_deprecated":false,"is_hidden":false,"is_beta":false,"is_stable":true,"codename":"","version_clean":"1.0.0","version":"1.0"},"__v":19,"parentDoc":null,"project":"559b65bd8b04e90d00702d54","category":{"_id":"55a4971be6c2470d002a6483","pages":["55a4995ee10ba50d00b40ba1","55a49c75e6c2470d002a6489","55a4a08de10ba50d00b40baf","55a4a0a5dad9d00d0071fca7","55a4a151dad9d00d0071fcab","55a4a211e6c2470d002a6495","55a4a72ae10ba50d00b40bc1","56043fdce5102a0d0070f937","566ca739f0a5dc0d009acbc3"],"project":"559b65bd8b04e90d00702d54","version":"559b65bd8b04e90d00702d57","__v":9,"sync":{"url":"","isSync":false},"reference":false,"createdAt":"2015-07-14T04:59:07.396Z","from_sync":false,"order":3,"slug":"must-know","title":"Must Know"},"user":"559b658d8b04e90d00702d52","updates":["55c74da737d9670d00ca446f","572bdda980b61a0e006afe53"],"next":{"pages":[],"description":""},"createdAt":"2015-07-14T02:09:09.997Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[]},"settings":"","auth":"required","params":[],"url":""},"isReference":false,"order":0,"body":"Chimp gives you the following opinionated tool combination:\n\n* **CucumberJS** \n* **WebdriverIO**\n* **Selenium** / **PhantomJS**\n* **Jasmine Expect** / **Chai + Chai-As-Promised**\n* **DDP** / **NPM** \n\nThe combination of these tools allows you to:\n* Write specifications files and automate them\n* Control the client\n* Control the server\n\n## Specifications & Automation\nYou use **CucumberJS** to define specifications using natural language in '.feature' files, and you automate the features with JavaScript or CoffeeScript code in \"step definition\" files. Read more about [Cucumber.js](doc:cucumberjs).\n\n## Client Control\nIn the automation layer you use **WebdriverIO** to control a browser. This allows you to automate clicking, typing, waiting for things to happen and reading values from your site, and supports chaining of commands to reduce unreadable callback nesting. Read more about [WebdriverIO](doc:webdriverio).\n\nYou can choose any real browser like Chrome or Firefox using **Selenium**, or you can use **PhantomJS**'s GhostDriver if you know exactly what you're doing (or you're a sucker for pain!). You can also run your automation on multiple browsers to ensure you catch any cross-browser issues. Read more about [Selenium & GhostDriver](doc:selenium-ghostdriver).\n\nYou get clean callback-less promise-less assertions using either the Jasmine or **Chai** assertion libraries.\n\nManaging the UI automation codebase can get pretty complicated. The baked-in Chimp-Widgets library provides you with a design pattern that helps you create reusable and maintainable high-level commands for your app. Read more about [Chimp Widgets](doc:chimp-widgets).\n\n## Server Control\n\nYou will likely need \"back-door\" access to your servers for automation so that you can perform tasks like:\n\n* Clearing state / databases\n* Adding test data\n* Enabling / disabling mocks & stubs\n* Modifying clocks\n\nYou can do this by creating fixtures or similar, and you can use *NPM** modules to use the protocol of your choice to talk to your fixture controller, such as REST using the `request` module.\n\nIf you are using Meteor, you can use the `xolvio:backdoor` package and have a pre-wired **DDP** connection in the automation layer to perform the above.\n\nTake some time to explore the rest of the Must Know section if you are new to the concepts above.\n\n---\n\n<a href=\"http://quality.xolv.io/?utm_source=XolvOSS&utm_medium=OSSDocs&utm_content=ChimpRM-Footer&utm_campaign=QFLaunch\"><img src=\"https://files.readme.io/764e495-qualityfasterbook-commas.small.png\" width=\"200\" align=\"right\" /></a>\n##Learn the Fundamentals of Testing, Specifications and Become a Chimp Ninja!\n[Checkout our new book](http://quality.xolv.io/?utm_source=XolvOSS&utm_medium=OSSDocs&utm_content=ChimpRM-Footer&utm_campaign=QFLaunch) where you can learn how to can use Chimp across the Full Stack from React to Node.JS, Mocha, Meteor and more.\n\n\n**[Quality, Faster.](http://quality.xolv.io/?utm_source=XolvOSS&utm_medium=OSSDocs&utm_content=ChimpRM-Footer&utm_campaign=QFLaunch)** By Sam Hatoum, creator of Chimp.","excerpt":"Things you must know about the various tools Chimp uses","slug":"key-concepts","type":"basic","title":"Key Concepts"}

Key Concepts

Things you must know about the various tools Chimp uses

Chimp gives you the following opinionated tool combination: * **CucumberJS** * **WebdriverIO** * **Selenium** / **PhantomJS** * **Jasmine Expect** / **Chai + Chai-As-Promised** * **DDP** / **NPM** The combination of these tools allows you to: * Write specifications files and automate them * Control the client * Control the server ## Specifications & Automation You use **CucumberJS** to define specifications using natural language in '.feature' files, and you automate the features with JavaScript or CoffeeScript code in "step definition" files. Read more about [Cucumber.js](doc:cucumberjs). ## Client Control In the automation layer you use **WebdriverIO** to control a browser. This allows you to automate clicking, typing, waiting for things to happen and reading values from your site, and supports chaining of commands to reduce unreadable callback nesting. Read more about [WebdriverIO](doc:webdriverio). You can choose any real browser like Chrome or Firefox using **Selenium**, or you can use **PhantomJS**'s GhostDriver if you know exactly what you're doing (or you're a sucker for pain!). You can also run your automation on multiple browsers to ensure you catch any cross-browser issues. Read more about [Selenium & GhostDriver](doc:selenium-ghostdriver). You get clean callback-less promise-less assertions using either the Jasmine or **Chai** assertion libraries. Managing the UI automation codebase can get pretty complicated. The baked-in Chimp-Widgets library provides you with a design pattern that helps you create reusable and maintainable high-level commands for your app. Read more about [Chimp Widgets](doc:chimp-widgets). ## Server Control You will likely need "back-door" access to your servers for automation so that you can perform tasks like: * Clearing state / databases * Adding test data * Enabling / disabling mocks & stubs * Modifying clocks You can do this by creating fixtures or similar, and you can use *NPM** modules to use the protocol of your choice to talk to your fixture controller, such as REST using the `request` module. If you are using Meteor, you can use the `xolvio:backdoor` package and have a pre-wired **DDP** connection in the automation layer to perform the above. Take some time to explore the rest of the Must Know section if you are new to the concepts above. --- <a href="http://quality.xolv.io/?utm_source=XolvOSS&utm_medium=OSSDocs&utm_content=ChimpRM-Footer&utm_campaign=QFLaunch"><img src="https://files.readme.io/764e495-qualityfasterbook-commas.small.png" width="200" align="right" /></a> ##Learn the Fundamentals of Testing, Specifications and Become a Chimp Ninja! [Checkout our new book](http://quality.xolv.io/?utm_source=XolvOSS&utm_medium=OSSDocs&utm_content=ChimpRM-Footer&utm_campaign=QFLaunch) where you can learn how to can use Chimp across the Full Stack from React to Node.JS, Mocha, Meteor and more. **[Quality, Faster.](http://quality.xolv.io/?utm_source=XolvOSS&utm_medium=OSSDocs&utm_content=ChimpRM-Footer&utm_campaign=QFLaunch)** By Sam Hatoum, creator of Chimp.