如何在 e2e 测试期间访问和操作结构指令
How to access and manipulate structural directives during an e2e test
背景: 我希望能够为给定路线排列 Angular2 屏幕的所有可能配置,并使用量角器对其进行截图:http://www.protractortest.org/#/debugging。
问题:在 e2e 测试期间,我似乎找不到访问指令(例如 ng-if)的方法。
- 是否可以在 e2e 测试中访问 ng-if 指令?
- 如果是:有没有办法操纵指令?通过操纵我的意思是在不改变指令所依赖的输入的情况下影响指令的评估。
可能的解决方案:这是一个关于我如何访问路由器以导航到特定路线的示例:
it('should get the router', () => {
browser.executeScript(() => {
const ng = window['ng'];
const root = document.getElementsByTagName('app-root')[0];
const router = ng.probe(root)
.injector.get(ng.coreTokens.Router);
const routes = router.config;
...
...
return [];
}).then(ret=> console.log(ret));
});
想法:
- 也许可以使用 ng.probe
以某种方式获取 ng-if 指令
如有任何关于我的问题的提示,我将不胜感激。
您可以按照以下方式进行:
html
<button id="find">Find ngIf directives and show all</button>
脚本
var findComments = function(el) {
var arr = [];
for(var i = 0; i < el.childNodes.length; i++) {
var node = el.childNodes[i];
if(node.nodeType === 8) {
arr.push(node);
} else {
arr.push.apply(arr, findComments(node));
}
}
return arr;
};
function findNgIfDirectives() {
var commentNodes = findComments(document);
const ng = window['ng'];
commentNodes.forEach(function(node) {
var debugNode = ng.probe(node);
var ngIf = (debugNode.providerTokens[0]);
var ngIfInstance = debugNode.injector.get(ngIf);
ngIfInstance.ngIf = true;
});
}
document.getElementById('find').addEventListener('click', findNgIfDirectives)
背景: 我希望能够为给定路线排列 Angular2 屏幕的所有可能配置,并使用量角器对其进行截图:http://www.protractortest.org/#/debugging。
问题:在 e2e 测试期间,我似乎找不到访问指令(例如 ng-if)的方法。
- 是否可以在 e2e 测试中访问 ng-if 指令?
- 如果是:有没有办法操纵指令?通过操纵我的意思是在不改变指令所依赖的输入的情况下影响指令的评估。
可能的解决方案:这是一个关于我如何访问路由器以导航到特定路线的示例:
it('should get the router', () => {
browser.executeScript(() => {
const ng = window['ng'];
const root = document.getElementsByTagName('app-root')[0];
const router = ng.probe(root)
.injector.get(ng.coreTokens.Router);
const routes = router.config;
...
...
return [];
}).then(ret=> console.log(ret));
});
想法:
- 也许可以使用 ng.probe 以某种方式获取 ng-if 指令
如有任何关于我的问题的提示,我将不胜感激。
您可以按照以下方式进行:
html
<button id="find">Find ngIf directives and show all</button>
脚本
var findComments = function(el) {
var arr = [];
for(var i = 0; i < el.childNodes.length; i++) {
var node = el.childNodes[i];
if(node.nodeType === 8) {
arr.push(node);
} else {
arr.push.apply(arr, findComments(node));
}
}
return arr;
};
function findNgIfDirectives() {
var commentNodes = findComments(document);
const ng = window['ng'];
commentNodes.forEach(function(node) {
var debugNode = ng.probe(node);
var ngIf = (debugNode.providerTokens[0]);
var ngIfInstance = debugNode.injector.get(ngIf);
ngIfInstance.ngIf = true;
});
}
document.getElementById('find').addEventListener('click', findNgIfDirectives)