我想做的是根据 Angular 服务中的数据进行一些测试断言,即我们正在尝试创建 E2E 测试,我们使用的工具允许我们执行任意 JavaScript 代码来断言,因此,为此我需要知道是否可以访问 Angular 服务实例。
如何从纯 JS 代码访问 Angular 服务实例?
也就是说,如果我的 Angular 应用程序已部署,我在浏览器中打开该应用程序,然后打开 Chrome DevTools,我能否访问提供给所有组件的 Angular 服务的服务实例?
我知道可以通过 ng.probe($0)
访问您的组件等等,但不确定服务。
从我到目前为止的搜索来看,我们似乎必须使用 Injector
类,然后使用它的 .get()
方法来访问 Angular 服务实例之一,但我不确定如何访问 Injector
类/实例本身?
这是我尝试过的:ng.probe($0)
($0
是我应用程序的 <app-root>
)然后我看到返回值有一个 .injector
属性(property),我试着调用ng.probe($0).injector.get('MyServiceName')
并收到以下错误:Uncaught Error: No provider for MyServiceName!
.
(尽管我正在尝试上面的 ng.probe
,但我很想知道如何在没有 ng.probe 的情况下访问注入(inject)器,因为在执行自动化测试期间,即生产模式,我认为我不会能够做到 ng.probe($0)
)
所以我不确定我是否尝试以正确的方式访问它?有什么想法吗?
我正在使用 Angular 4。
最佳答案
这对我在 Angular 7 中使用 ng.probe()
很有用:
window.ng.probe(window.getAllAngularRootElements()[0])
.injector.view.root.ngModule._providers
.find(p => p && p.constructor && p.constructor.name === 'MyServiceName');
而且我想如果没有 ng.probe()
关于javascript - 从 JavaScript 代码访问 Angular 服务实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49540653/