从JavaScript代码获取对Angular服务实例的访问
我试图做的是基于Angular服务中的数据进行一些测试断言,即我们试图创建E2E测试,我们使用的工具允许我们为断言执行任意JavaScript代码,因此我需要知道是否有可能访问Angular服务实例 如何从纯JS代码访问Angular service实例 也就是说,若部署了我的Angular应用程序,我在浏览器中打开该应用程序,然后打开Chrome DevTools,我可以访问提供给所有组件的my Angular service的服务实例吗 我知道可以通过从JavaScript代码获取对Angular服务实例的访问,javascript,angular,testing,Javascript,Angular,Testing,我试图做的是基于Angular服务中的数据进行一些测试断言,即我们试图创建E2E测试,我们使用的工具允许我们为断言执行任意JavaScript代码,因此我需要知道是否有可能访问Angular服务实例 如何从纯JS代码访问Angular service实例 也就是说,若部署了我的Angular应用程序,我在浏览器中打开该应用程序,然后打开Chrome DevTools,我可以访问提供给所有组件的my Angular service的服务实例吗 我知道可以通过ng.probe($0)等访问您的组件,
ng.probe($0)
等访问您的组件,但不确定服务
从我到目前为止的搜索来看,似乎我们必须使用Injector
类,然后使用它的.get()
方法来访问一个角度服务实例,但我不确定如何访问Injector
类/实例本身
以下是我尝试过的:ng.probe($0)
($0
是我的应用程序的
),然后我看到返回值有一个.injector
属性,我尝试调用ng.probe($0).injector.get('MyServiceName')
,并得到一个错误:未捕获的错误:MyServiceName没有提供程序代码>
(尽管我正在尝试上面的ng.probe
,但我希望知道如何在没有ng.probe的情况下访问喷油器,因为在执行自动测试(即prod模式)期间,我认为我无法执行ng.probe($0)
)
所以我不确定我是否试图以正确的方式访问它?有什么想法吗
我使用的是Angular 4。这适用于Angular 7,使用的是ng.probe()
:
window.ng.probe(window.getAllAngularRootElements()[0])
.injector.view.root.ngModule.\u提供程序
.find(p=>p&&p.constructor&&p.constructor.name==='MyServiceName');
我想如果没有ng.probe()
可能重复的ng.probe($0),就不可能用另一种方法来做
对于
并查看它的providerToken
我发现它只有一个元素,我想访问的服务不是其中之一。还有没有其他方法没有ng.probe()
,因为ng.probe()
在生产中无法工作。是的,生产中没有ng.probe。这意味着您不能在生产环境中这样做。e2e不能被视为生产环境,所以您可以在那里切换到dev。您可以向窗口
公开根注入器,但如果没有提供程序令牌,它将毫无用处(而且根注入器不是Angular应用程序中的唯一注入器,所以它是一个半度量)。providerToken中的可用内容取决于您的应用程序。考虑一下提供问题的问题——一个问题。