Addendum
In creating the test case I've realised that I'm not passing a partialContext to callRule, so it is definitely missing context, however, it is not at all clear what context is necessary for mergeWith to succeed and the error does not indicate that context is actually missing.
Happy for this to be marked as a question instead. Guidance on how to provide the context and what context to provide would be amazingly useful.
🐞 Bug report
Description
Using callRule to unit test rules within a schematic fails when it comes to rules which return mergeWith
🔬 Minimal Reproduction
See: https://github.com/jdpearce/schematics-apply-problem
Given a rule which applies template files to the tree, this unit test will fail with TypeError: Cannot read property 'path' of undefined:
describe('applyTemplateFiles Rule', () => {
let tree: UnitTestTree;
beforeEach(async () => {
tree = new UnitTestTree(Tree.empty());
});
it('should apply the files to the tree', async () => {
const schema = {};
tree = (await callRule(applyTemplateFiles(schema), tree)) as UnitTestTree;
expect(tree.files).toEqual(jasmine.arrayContaining(['/libs/destination/test.txt']));
});
});
🔥 Exception or Error
Failures:
1) applyTemplateFiles Rule should apply the files to the tree
Message:
TypeError: Cannot read property 'path' of undefined
Stack:
at <Jasmine>
at ./apply-problem/node_modules/@angular-devkit/schematics/tools/file-system-engine-host-base.js:216:96
at ./tmp/apply-problem/node_modules/@angular-devkit/schematics/src/rules/url.js:13:73
at Object.callSource (./tmp/apply-problem/node_modules/@angular-devkit/schematics/src/rules/call.js:55:20)
at ./tmp/apply-problem/node_modules/@angular-devkit/schematics/src/rules/base.js:45:60
at Object.callSource (./tmp/apply-problem/node_modules/@angular-devkit/schematics/src/rules/call.js:55:20)
at ./tmp/apply-problem/node_modules/@angular-devkit/schematics/src/rules/base.js:53:23
at MergeMapSubscriber.project (./tmp/apply-problem/node_modules/@angular-devkit/schematics/src/rules/call.js:74:24)
at MergeMapSubscriber._tryNext (./tmp/apply-problem/node_modules/rxjs/internal/operators/mergeMap.js:69:27)
at MergeMapSubscriber._next (./tmp/apply-problem/node_modules/rxjs/internal/operators/mergeMap.js:59:18)
at MergeMapSubscriber.Subscriber.next (./tmp/apply-problem/node_modules/rxjs/internal/Subscriber.js:66:18)
2 specs, 1 failure
🌍 Your Environment
"@angular-devkit/core": "^9.0.6",
"@angular-devkit/schematics": "^9.0.6",
"@types/jasmine": "^3.3.9",
"@types/node": "^8.0.31",
"jasmine": "^3.3.1",
"typescript": "~3.5.3"
Addendum
In creating the test case I've realised that I'm not passing a
partialContexttocallRule, so it is definitely missing context, however, it is not at all clear what context is necessary formergeWithto succeed and the error does not indicate that context is actually missing.Happy for this to be marked as a question instead. Guidance on how to provide the context and what context to provide would be amazingly useful.
🐞 Bug report
Description
Using
callRuleto unit test rules within a schematic fails when it comes to rules which returnmergeWith🔬 Minimal Reproduction
See: https://github.com/jdpearce/schematics-apply-problem
Given a rule which applies template files to the tree, this unit test will fail with
TypeError: Cannot read property 'path' of undefined:🔥 Exception or Error
Failures: 1) applyTemplateFiles Rule should apply the files to the tree Message: TypeError: Cannot read property 'path' of undefined Stack: at <Jasmine> at ./apply-problem/node_modules/@angular-devkit/schematics/tools/file-system-engine-host-base.js:216:96 at ./tmp/apply-problem/node_modules/@angular-devkit/schematics/src/rules/url.js:13:73 at Object.callSource (./tmp/apply-problem/node_modules/@angular-devkit/schematics/src/rules/call.js:55:20) at ./tmp/apply-problem/node_modules/@angular-devkit/schematics/src/rules/base.js:45:60 at Object.callSource (./tmp/apply-problem/node_modules/@angular-devkit/schematics/src/rules/call.js:55:20) at ./tmp/apply-problem/node_modules/@angular-devkit/schematics/src/rules/base.js:53:23 at MergeMapSubscriber.project (./tmp/apply-problem/node_modules/@angular-devkit/schematics/src/rules/call.js:74:24) at MergeMapSubscriber._tryNext (./tmp/apply-problem/node_modules/rxjs/internal/operators/mergeMap.js:69:27) at MergeMapSubscriber._next (./tmp/apply-problem/node_modules/rxjs/internal/operators/mergeMap.js:59:18) at MergeMapSubscriber.Subscriber.next (./tmp/apply-problem/node_modules/rxjs/internal/Subscriber.js:66:18) 2 specs, 1 failure🌍 Your Environment