Open JordyThien opened 4 years ago
This is caused by a parser in aurelia-validation/src/property-accessor-parser.ts
, this parser filters the property name from the accessor function passed to the ensure method: .ensure((a: App) => a.message)
which is then used to merge validation rules based on the returned property's name.
The parser only accepts the following "classic" function formats:
function (a) {
return a.message;
}
function (a) {
"use strict";
return a.message;
}
function (a) {
"use strict";
cov_2n0ovlwwxg.f[2]++;
return a.message;
}
function (a) {
cov_2n0ovlwwxg.f[2]++;
return a.message;
}
And fails on the following:
function (a) {
cov_2n0ovlwwxg.f[2]++;
cov_2n0ovlwwxg.s[5]++;
return a.message;
}
function (a) {
/* istanbul ignore next */
cov_2n0ovlwwxg.f[2]++;
cov_2n0ovlwwxg.s[5]++;
return a.message;
}
So it seems that the combination of the used code coverage tool (istanbul), transpiling and accessor-parser are causing this issue.
Whilst I don't now the reasoning behind the regex used in the getAccesorExpression, one possible solution for this issue is replacing the regex used in parsing the "classic" function with:
/^function\s*\([$_\w\d]+\)\s*\{(?:\s*"use strict";)?(?:[$_\s\w\d\/\*.['"\]+;]+)?\s*return\s+[$_\w\d]+\.([$_\w\d]+)\s*;?\s*\}$/
add / istanbul ignore next / before validation rules to skip the coverage till they fix the regex problem.
I'm submitting a bug report
Please tell us about your environment:
Operating System: Windows 10
Node Version: V10.16.0
NPM Version: 6.9.0
JSPM OR Webpack AND Version webpack 4.34.0
Browser: n/a
Language: TypeScript 3.1.2
Current behavior: When running a test that tests a component which uses ValidationRules, the following error pops up:
I have searched for a proper way to unittest this, but I'm unable to find a solution. Hopefully the community can help me out.
What is the expected behavior? A possibility to run unittest that contains ValidationRules without it throwing an exception.
I have created a public repo where you can find all the files necessary: https://github.com/JordyThien/aurelia-unittest-validation-rules Basically I created a new aurelia project using the aurelia CLI:
au new aurelia-testing --unattended --select typescript,jest,vscode --here
I've updated the https://github.com/JordyThien/aurelia-unittest-validation-rules/blob/master/src/app.ts to contain ValidationRules And I updated the spec to add
aurelia-validation
Where running the tests usingau test
the exception will be thrown.