Using the Jasmine test framework? Follow the instructions below to report results. If you are not using Jasmine please see the Node.js docs for integrating with a lower-level library.
Install the jasmine-tesults-reporter
npm install jasmine-tesults-reporter --save
Register the reporter with Jasmine. Add this to your spec helper:
const tesultsReporter = require("jasmine-tesults-reporter")
jasmine.getEnv().addReporter(tesultsReporter);
To upload results to a target belonging to your Tesults project, pass the tesults-target arg to the Jasmine process. This can be done on the commandline or added to your package.json file:
"scripts": {
"test": "jasmine -- tesults-target=token"
}
Then run jasmine as usual with the npm test command. Use npm run script-name if you named the script something other than test in the package.json. If running jasmine from the commandline run:
jasmine -- tesults-target=token
The 'token' above should be replaced with your Tesults target token, which you received when creating a project or target, and can be regenerated from the configuration menu.
To handle multiple reporting targets for different jobs create different scrips with different target tokens in the package.json file:
"scripts": {
"test-job-1": "jasmine -- tesults-target=token1"
"test-job-2": "jasmine -- tesults-target=token2"
"test-job-3": "jasmine -- tesults-target=token3"
}
The reporter treats the describe as a test suite and each it as a test case.
describe('Test Suite A', function() {
it("Test Case 1", function () {
expect(2).toEqual(2);
});
it("Test 2", function () {
expect(1).toEqual(2);
});
});
describe('Test Suite B', function() {
it("Test 3", function () {
expect(3).toEqual(3);
});
});
Using Protractor? The configuration instructions above do not apply. Follow the Protractor configuration instructions instead and then return here to continue.
At this point the jasmine-tesults-reporter will push results to Tesults when you run your jasmine command. The tesults-target arg must be supplied to indicate which target to use.
To supply multiple args to the reporter use this format:
jasmine -- arg1=val1 arg2=val2 arg3=val3
Example:
jasmine -- tesults-target=token tesults-files=path
tesults-targetRequired
Required arg to upload to Tesults, if this arg is not provided the reporter does not attempt upload, effectively disabling it. Get your target token from the configuration menu in the Tesults web interface.
tesults-target=eyJ0eXAiOiJ...
Use the Tesults reporter to report additional properties for each test case. To begin doing this, require the reporter in your test file:
const tesultsReporter = require("jasmine-tesults-reporter")
Report custom fields, test steps and attach files to test cases using the Tesult reporter functions: description, custom, step, and file. Call reporter functions from within your tests (test block):
Add a description of the test case for reporting purposes.
tesultsReporter.description
("some description here")
Add a custom field and value to the test case for reporting purposes.
tesultsReporter.custom
("Some custom field", "Some custom value")
Associate a file to the test case in order to upload it for reporting.
tesultsReporter.file
("/full/path/to/file/screenshot.png")
Caution: If uploading files the time taken to upload is entirely dependent on your network speed. Typical office upload speeds of 100 - 1000 Mbps should allow upload of even hundreds of files quite quickly, just a few seconds, but if you have slower access it may take hours. We recommend uploading a reasonable number of files for each test case. The upload method blocks at the end of a test run while uploading test results and files. When starting out test without files first to ensure everything is setup correctly.
Add test steps to the test case for reporting. Each step is an object with a name and result (one of [pass, fail, unknown]). You can also add the optional fields description and reason (failure reason in case of step fail).
tesultsReporter.step
({
name
: "First step",
result
: "pass"
})
tesultsReporter.step
({
name
: "Second step",
description
: "Second step description",
result
: "fail"
reason
: "Error line 203 of test.js"
})
A complete enhanced reporting example:
const tesultsReporter = require("jasmine-tesults-reporter")
describe ('Suite A', () => {
test('Test 1', () => {
tesultsReporter.custom("custom field 1", "custom value 1")
tesultsReporter.description("description here")
tesultsReporter.step(
{name: "step 1", description: "step 1 description", result: "pass"})
tesultsReporter.step(
{name: "step 2", description: "step 2 description", result: "pass"})
tesultsReporter.file("/full/path/logs/log1.txt")
});
});
This method of uploading files is no longer recommended starting from jasmine-tesults-reporter 1.1.0+. If using jasmine-tesults-reporter 1.1.0 or newer, utilize the file method described above to simplify uploading files from tests.
tesults-filesOptional
Provide this arg to save files generated during a test run. The value for this arg is the top-level directory where files generated during testing are saved for the running test run. Files, including logs, screen captures and other artifacts will be automatically uploaded.
tesults-files=/Users/admin/Desktop/temporary
This is one area where the jasmine-tesults-reporter is opinionated and requires that files generated during a test run be saved locally temporarily within a specific directory structure.
Store all files in a temporary directory as your tests run. After Tesults upload is complete, delete the temporary directory or just have it overwritten on the next test run.
Within this temporary directory create subdirectories matching the test suite (describe) and test case (it) name.
Be aware that if providing build files, the build suite is always set to [build] and files are expected to be located in temporary/[build]/buildname
Caution: If uploading files the time taken to upload is entirely dependent on your network speed. Typical office upload speeds of 100 - 1000 Mbps should allow upload of even hundreds of files quite quickly, just a few seconds, but if you have slower access it may take hours. We recommend uploading a reasonable number of files for each test case. The upload method blocks at the end of a test run while uploading test results and files. When starting out test without files first to ensure everything is setup correctly.
tesults-build-nameOptional
Use this to report a build version or name for reporting purposes.
tesults-build-name=1.0.0
tesults-build-resultOptional
Use this to report the build result, must be one of [pass, fail, unknown].
tesults-build-result=pass
tesults-build-descriptionOptional
Use this to report a build description for reporting purposes.
tesults-build-description='added new feature'
tesults-build-reasonOptional
Use this to report a build failure reason.
tesults-build-reason='build error line 201 somefile.js'
Result interpretation is supported by Jasmine. Install version 1.0.1 or newer. If you use result interpretation we recommend you add these minimum mapping values:
If you execute multiple test runs in parallel or serially for the same build or release and results are submitted to Tesults within each run, separately, you will find that multiple test runs are generated on Tesults. This is because the default behavior on Tesults is to treat each results submission as a separate test run. This behavior can be changed from the configuration menu. Click 'Results Consolidation By Build' from the Configure Project menu to enable and disable consolidation by target. Enabling consolidation will mean that multiple test runs submitted with the same build name will be consolidated into a single test run.
If you dynamically create test cases, such as test cases with variable values, we recommend that the test suite and test case names themselves be static. Provide the variable data information in the test case description or other custom fields but try to keep the test suite and test name static. If you change your test suite or test name on every test run you will not benefit from a range of features Tesults has to offer including test case failure assignment and historical results analysis. You need not make your tests any less dynamic, variable values can still be reported within test case details.
Does your corporate/office network run behind a proxy server? Contact us and we will supply you with a custom API Library for this case. Without this results will fail to upload to Tesults.