siesta-lite
Version:
Stress-free JavaScript unit testing and functional testing tool, works in NodeJS and browsers
88 lines (61 loc) • 2.94 kB
JavaScript
/*
Siesta 5.6.1
Copyright(c) 2009-2022 Bryntum AB
https://bryntum.com/contact
https://bryntum.com/products/siesta/license
*/
Class('Siesta.Result.SubTest', {
isa : Siesta.Result,
has : {
// reference to a test it belongs to
// SubTests result instances will be set as `results` for sub tests instances
test : null
},
methods : {
isWorking : function () {
return !this.test.isFinished()
},
toJSON : function () {
var test = this.test
// a flag that test instance does not belongs to the current context
// this only happens during self-testing
// if this is the case, in IE, calling any method from the test context will throw exception
// "can't execute script from freed context", so we avoid calling any methods on the test in such case
// accessing properties is ok though
var isCrossContext = !(test instanceof Object)
var report = {
id : this.id,
parentId : test.parent ? test.parent.getResults().id : null,
type : this.meta.name,
name : test.name,
startDate : test.startDate,
endDate : test.endDate || (new Date() - 0),
passed : isCrossContext ? null : test.isPassed()
}
// top level test
if (!test.parent) {
report.automationElementId = test.automationElementId
report.url = test.url
report.jUnitClass = test.getJUnitClass()
report.groups = test.groups
}
if (test.specType) report.bddSpecType = test.specType
if (test.isTodo) report.isTodo = true
var isFailed = false
var assertions = []
Joose.A.each(this.children, function (result) {
if ((result instanceof Siesta.Result.Assertion) || (result instanceof Siesta.Result.Diagnostic) || (result instanceof Siesta.Result.SubTest)) {
var assertion = result.toJSON()
if (!assertion.passed && !assertion.isTodo) isFailed = true
assertions.push(assertion)
}
})
report.assertions = assertions
// see a comment above
if (isCrossContext) {
report.passed = !(isFailed || test.failed || !test.endDate)
}
return report
}
}
})