Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从JavaScript代码获取对Angular服务实例的访问_Javascript_Angular_Testing - Fatal编程技术网

从JavaScript代码获取对Angular服务实例的访问

从JavaScript代码获取对Angular服务实例的访问,javascript,angular,testing,Javascript,Angular,Testing,我试图做的是基于Angular服务中的数据进行一些测试断言,即我们试图创建E2E测试,我们使用的工具允许我们为断言执行任意JavaScript代码,因此我需要知道是否有可能访问Angular服务实例 如何从纯JS代码访问Angular service实例 也就是说,若部署了我的Angular应用程序,我在浏览器中打开该应用程序,然后打开Chrome DevTools,我可以访问提供给所有组件的my Angular service的服务实例吗 我知道可以通过ng.probe($0)等访问您的组件,

我试图做的是基于Angular服务中的数据进行一些测试断言,即我们试图创建E2E测试,我们使用的工具允许我们为断言执行任意JavaScript代码,因此我需要知道是否有可能访问Angular服务实例

如何从纯JS代码访问Angular service实例

也就是说,若部署了我的Angular应用程序,我在浏览器中打开该应用程序,然后打开Chrome DevTools,我可以访问提供给所有组件的my Angular service的服务实例吗

我知道可以通过
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中的可用内容取决于您的应用程序。考虑一下提供问题的问题——一个问题。