javascript - 从 JavaScript 代码访问 Angular 服务实例

标签 javascript angular testing

我想做的是根据 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/

相关文章:

javascript - Css 溢出隐藏所有内容。无法修改滚动条

javascript - 在 JCrop 上设置最小高度和宽度

javascript - 获取类的函数引用(不是对象)

angular - 如何从指令中填充选择选项?

css - 在指令的 'host' 属性中动态设置的类未应用于 Angular 8 中的父模板

api - 超时 - 在 jest.setTimeout 指定的 5000 毫秒超时时间内未调用异步回调

C、宏如何注册一个单元测试来执行?

javascript - 间接调用函数时成员未定义

用于 Visual Studio 代码的 Angular 5 重构工具

javascript - 为 JavaScript 应用程序创建测试数据的最佳方式是什么?