User Name:

User Email:

This information will only be saved for the purposes of communicating with those who have provided this information voluntarily regarding our services.We will never sell your name or email address to anyone.
© 2021 - First Crazy Developer (Abhishek Kumar)

crazydeveloper Chutzpah JavaScript Test Runner

"Chutzpah is an open source JavaScript test runner which enables you to run unit tests using QUnit, Jasmine, Mocha, CoffeeScript and TypeScript."

Chutzpah works by running the JavaScript unit tests inside of a headless browser. A headless browser is a web browser control which runs in the background. The same way you run your unit tests inside of a browser is how they run with Chutzpah. When you execute Chutzpah on your HTML test harness it launches the headless browser, runs the HTML file and then captures and parses the results. When you run Chutzpah on your JavaScript tests it will generate a test harness HTML file for you and run that through the headless browser.

The headless browser Chutzpah uses is called PhantomJS . PhantomJS is based on the webkit rendering engine which is important to keep in mind since you are not guaranteed your tests will pass on a browser that uses a different rendering engine. However, in most cases your tests should work fine in across most the modern browser. In the future Chutzpah will support more browsers that use different rendering engines.

When we use Chutzpah there is an important file called "Chutzpah settings file"

The Chutzpah settings file is an .json file that you can place anywhere in your testing directories to inform Chutzpah of test specific settings. The Chuzpah settings file is completely optional and if the file or any of its properties are omitted Chutzpah will use the default values.

When Chutzpah is run on a file (lets say test.js) it scans the current directory for a file named chutzpah.json. If it does not find one it will recursively traverse up the directory chain looking for one. This behavior provides a lot of flexibility since you can provide multiple chutzpah.json files in your tree and each one will work over its sub-folder. This lets you have different settings for different groups of tests.

Important: The deserializer Chutzpah uses is is restrictive about what you put in your chutzpah.json file. To make sure it parses correctly make sure you surround all properties in quotes and do not put comments in the file.

The settings file is a text file with json content of the following format:

  1. {
  2. "Framework": "qunit|jasmine|mocha",
  3. "FrameworkVersion": "",
  4. "TestFileTimeout": "<Timeout in milliseconds>",
  5. "TestHarnessLocationMode": "TestFileAdjacent|SettingsFileAdjacent|Custom",
  6. "TestHarnessDirectory": "<Path to a folder>",
  7. "TestHarnessReferenceMode": "Normal|AMD",
  8. "RootReferencePathMode":"DriveRoot|SettingsFileDirectory",
  9. "CodeCoverageIncludes": [],
  10. "CodeCoverageExcludes": [],
  11. "EnableCodeCoverage": "true|false|null",
  12. "References": [],
  13. "Tests": [],
  14. "CoffeeScriptBareMode": "true|false",
  15. "CustomTestHarnessPath": "<Path to custom test harness file>",
  16. "Compile": <A compile configuration object>,
  17. "TestPattern": "<Regex test name pattern>",
  18. "AMDBasePath": "<Path to same location that your Require.js config baseurl points to>",
  19. "TypeScriptCodeGenTarget" : "ES3|ES5",
  20. "TypeScriptModuleKind" : "CommonJS|AMD",
  21. }

The chutzpah.json file supports the following properties

Framework – Determines what testing framework to use. This will override the other detection methods. This is helpful if Chutzpah is having trouble figuring out what your intended framework is. If left out Chutzpah will automatically try to detect the framework.

FrameworkVersion - Tells Chutzpah if it should use a different version of on of the test frameworks than the default one. Currently, the only framework this works for is Jasmine. As of the 3.1.0 release Chutzpah default to Jasmine 2.0 but if you want to use the 1.0 line for Jasmine still pass "1" for FrameworkVersion.

References - Using the references setting

Tests - Using the tests setting

Compile - Using the compile setting

TestFileTimeout - The time to wait for tests in a file to finish in milliseconds

TestHarnessLocationMode – Determines where to place the generated html test harness files. The default mode is TestFileAdjacent which means the harness is placed in the same directory as the test file. SettingsFileAdjacent means it is placed in the same directory as the chutzpah.json file. Custom mode lets you specify a custom path to the directory.

TestHarnessDirectory – When TestHarnessLocationMode is set to Custom this is either the relative or absolute path to the directory where to place the test harness.

RootReferencePathMode – This property determines what directory a rooted reference path refers to. In a test file Chutzpah parses the <reference path="" /> tags to determine your test dependencies. By default (the DriveRoot setting) if you write <reference path="\a.js" /> Chutzpah will look for a.js under C:\ (assuming you are running your test in the C drive). However, if you set this property to SettingsFileDirectory Chutpah will now look for a.js relative to the location of the chutzpah.json file. This is useful if you have a large project and want to minimize the number of long reference paths.

EnableCodeCoverage - If True, forces code coverage to run always. If null or not not set, allows code coverage to run if invoked using test adapter, command line or context menu options (default). If False, forces code coverage to never run.

CodeCoverageIncludes - The collection code coverage file patterns to include in coverage. These are in glob format. If you specify none all files are included.

CodeCoverageExcludes - The collection code coverage file patterns to exclude in coverage. These are in glob format. If you specify none no files are excluded.

CustomTestHarnessPath - The CustomTestHarnessPath setting allows you to override the default template Chutzpah uses for the HTML test harness. This is an advanced feature which should only be used as a last resort. Read how to use it in Customizable HTML harness generation.

CoffeeScriptBareMode - The CoffeeScriptBareMode indicates if you want CoffeeScript compilation to output scripts in bare mode or not. In bare mode CoffeeScript won’t wrap the generated JavaScript in a function to protect the scope. The default value is true.

AMDBasePath - Lets you configure Chutzpah to work in with RequireJS when you are setting a baseurl in your Require.js config. This should point to the same location. See this example.

TestPattern - Using the TestPattern setting

Happy reading !!!

Abhishek Kumar

crazydeveloper Home Page 14 April 2016

Become a Fan