问题标签 [angular-test]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
3388 浏览

angular - 如何使用 Observable Input 测试 Angular 组件

我正在尝试测试一个Component基本上接收并根据从该 Observable 发出的值Observable更改它的 Angular。template这是一个简化版本:

我想对其进行测试,目前这就是我所拥有的,正在使用rxjs-marbles(尽管这不是必须的)。

显然这是行不通的。我的问题是我没有找到一种方法将 TestScheduler 推进每个expect.

如何手动跳帧?或者,是否有更好的方法来测试上述组件/场景(Angular 组件接收一个Observable并且我想测试它的行为给定 Observable 的发射)。

我确实看到了.flush(),但据记录,它运行所有 Observable 的发射,所以我会到达最终状态,并且无法测试状态之间的不同转换。

谢谢

0 投票
1 回答
6165 浏览

angular - 使用具有静态方法的实用程序类对组件进行单元测试

我有使用LocaleService该服务的类和静态方法的组件instant()LocaleService在未注入组件中。在测试组件时,我对LocaleService内部不感兴趣,也不想测试它。因此,beforeEach我添加了一个间谍

这工作得很好。现在我需要将这个间谍(和其他)移动到一个存根,LocaleService并在这个测试和其他组件的测试中使用它LocaleService- 其中有很多。实现这一目标的最正确方法是什么?如何创建可重用的 LocaleServiceStub?

\app\utils\locale.service.ts

在被测类中的使用\app\settings\users\user-form.component.ts

0 投票
1 回答
721 浏览

angular - Angular 测试 SpyNgModuleFactoryLoader.stubbedModules 无法识别 2 个惰性模块

我正在尝试使用具有角度 6 业力的惰性模块来测试路由器导航。但我收到控制台错误

Cannot find module app/features/landing/landing.module#landingPageModule.

然后我用

loader = TestBed.get(NgModuleFactoryLoader); loader.stubbedModules = { 'landingPageModule': LandingPageModule };

当我导航时一切都很好

{path: 'main', loadChildren: 'landingPageModule'},

但是当我导航时

{path: 'main/auth/login', loadChildren: 'AuthModule'},

我还在

Cannot find module app/features/auth/auth.module#AuthModule 控制台上的错误。

LandingPageroutes 看起来像这样

AuthModule 在 LandingPageModule 上声明,所以我需要在“SpyNgModuleFactoryLoader”上存根 2 个模块,但它不起作用

0 投票
0 回答
590 浏览

karma-jasmine - 如何覆盖 Jasmine Spyon 中的响应

我有一个模拟服务,我需要在特定的测试用例中覆盖模拟服务响应,但它从模拟服务中获取一个值,而不是 spyon 中的新响应。

在这里,我有一个模拟服务并返回一些值。

在规范之一的测试用例中,我得到了上述响应和测试用例成功。

)

在另一个测试用例中,我需要测试失败场景。

在这种情况下,从预定义的模拟响应中获取值。为什么在 spyOn 中提供 throwError 后不会出错

0 投票
0 回答
401 浏览

angular - 注入的服务不起作用

我正在尝试使用模拟服务测试 Angular 6 组件。

我对下面代码的意图是使用嵌套describe语句以允许不同版本的模拟服务返回不同的结果

真正的服务执行一些 HTTP 调用,而我的模拟返回一个带有数据的 Observable。

当我执行测试时,我看到 Jasmine 正在尝试实际执行 HTTP 调用并且忽略了我的模拟

运行茉莉花测试给了我

Chrome 66.0.3359 (Mac OS X 10.12.6) ERROR Chrome 66.0.3359 (Mac OS X 10.12.6) ERROR Disconnectedundefined Chrome 66.0.3359 (Mac OS X 10.12.6): Executed 1 of 37 (skipped 36) SUCCESS ( 1.779 秒/1.655 秒)sNm6eZUIrnZxAOwqAAAI,ID 为 92987428 Chrome 66.0.3359(Mac OS X 10.12.6):执行 0 of 37 成功(0 秒/0 秒)信息:“模块的第一次设置”Chrome 66.0.3359(Mac OS X 10.12.6): 执行 0 of 37 SUCCESS (0 secs / 0 secs) INFO: 'First setup of module' 27 05 2018 17:36:00.293:WARN [web-server]: 404: /api/services/ui /form/portal 27 05 2018 17:36:00.551:WARN [web-server]: 404: /api/services/ui/form/portal INFO: '建立组件' Chrome 66.0.3359 (Mac OS X 10.12.6) :执行 0 of 37 SUCCESS (0 secs / 0 secs) INFO: '建立组件' INFO: '第二次重新设置模块' Chrome 66.0.3359 (Mac OS X 10.12.6): Executed 0 of 37 SUCCESS (0 secs / 0 秒)信息:“第二次重新设置模块”信息:“实例化”Chrome 66.0.3359(Mac OS X 10.12.6):执行 0 次,共 37 次成功(0 秒/0 秒)信息:“实例化”信息: 'hello world' Chrome 66.0.3359 (Mac OS X 10.12.6): 执行 0 of 37 SUCCESS (0 secs / 0 secs) INFO: 'hello world' LOG: HttpErrorResponse{headers: HttpHeaders{normalizedNames: Map{},lazyUpdate :空,lazyInit:函数(){...}},状态:404,状态文本:'未找到',网址:'建立组件的信息:“第二次重新设置模块”Chrome 66.0.3359(Mac OS X 10.12.6):执行 0 次,共 37 次成功(0 秒/0 秒)信息:“第二次重新设置模块”信息: '实例化' Chrome 66.0.3359 (Mac OS X 10.12.6): 执行 0 of 37 成功 (0 秒 / 0 秒) 信息: '实例化' 信息: 'hello world' Chrome 66.0.3359 (Mac OS X 10.12.6 ): 执行 0 of 37 SUCCESS (0 secs / 0 secs) INFO: 'hello world' LOG: HttpErrorResponse{headers: HttpHeaders{normalizedNames: Map{}, lazyUpdate: null, lazyInit: function () { ... }},状态:404,状态文本:'未找到',网址:'建立组件的信息:“第二次重新设置模块”Chrome 66.0.3359(Mac OS X 10.12.6):执行 0 次,共 37 次成功(0 秒/0 秒)信息:“第二次重新设置模块”信息: '实例化' Chrome 66.0.3359 (Mac OS X 10.12.6): 执行 0 of 37 成功 (0 秒 / 0 秒) 信息: '实例化' 信息: 'hello world' Chrome 66.0.3359 (Mac OS X 10.12.6 ): 执行 0 of 37 SUCCESS (0 secs / 0 secs) INFO: 'hello world' LOG: HttpErrorResponse{headers: HttpHeaders{normalizedNames: Map{}, lazyUpdate: null, lazyInit: function () { ... }},状态:404,状态文本:'未找到',网址:'执行 0 of 37 SUCCESS (0 secs / 0 secs) INFO: 'Second re-setup of module' INFO: 'instantiated' Chrome 66.0.3359 (Mac OS X 10.12.6): Executed 0 of 37 SUCCESS (0 secs / 0秒)信息:“实例化”信息:“你好世界”Chrome 66.0.3359(Mac OS X 10.12.6):执行 0 次,共 37 次成功(0 秒 / 0 秒)信息:“你好世界”日志:HttpErrorResponse {标题: HttpHeaders{normalizedNames: Map{},lazyUpdate: null,lazyInit: function () { ... }}, status: 404, statusText: 'Not Found', url: '执行 0 of 37 SUCCESS (0 secs / 0 secs) INFO: 'Second re-setup of module' INFO: 'instantiated' Chrome 66.0.3359 (Mac OS X 10.12.6): Executed 0 of 37 SUCCESS (0 secs / 0秒)信息:“实例化”信息:“你好世界”Chrome 66.0.3359(Mac OS X 10.12.6):执行 0 次,共 37 次成功(0 秒 / 0 秒)信息:“你好世界”日志:HttpErrorResponse {标题: HttpHeaders{normalizedNames: Map{},lazyUpdate: null,lazyInit: function () { ... }}, status: 404, statusText: 'Not Found', url: '实例化'信息:'hello world' Chrome 66.0.3359(Mac OS X 10.12.6):执行 0 次,共 37 次成功(0 秒 / 0 秒)信息:'hello world' 日志:HttpErrorResponse{headers: HttpHeaders{normalizedNames: Map {},lazyUpdate:null,lazyInit:function(){...}},状态:404,statusText:'未找到',url:'实例化'信息:'hello world' Chrome 66.0.3359(Mac OS X 10.12.6):执行 0 次,共 37 次成功(0 秒 / 0 秒)信息:'hello world' 日志:HttpErrorResponse{headers: HttpHeaders{normalizedNames: Map {},lazyUpdate:null,lazyInit:function(){...}},状态:404,statusText:'未找到',url:'http://localhost:9876/api/seLOG : HttpErrorResponse{headers: HttpHeaders{normalizedNames: Map{},lazyUpdate: null,lazyInit: function () { ... }}, status: 404, statusText: 'Not Found' , url: ' http://localhost:9876/api/services/ui/form/portal ', ok: false, name: 'HttpErrorResponse', message: ' http://localhost:9876/api/的Http失败响应services/ui/form/portal : 404 Not Found',错误:'NOT FOUND'} Chrome 66.0.3359 (Mac OS X 10.12.6): Executed 0 of 37 SUCCESS (0 secs / 0 secs) LOG: HttpErrorResponse {headers : HttpHeaders{normalizedNames: Map{}, lazyUpdate: null, lazyInit: function () { ... }}, status: 404, statusText: 'Not Found', url: ' http://localhost:9876/api/services/ui/form/portal',好的:false,名称:'HttpErrorResponse',消息:' http://localhost:9876/api/services/ui/form/portal的 Http 失败响应:404 Not Found',错误:'NOT FOUND'} 日志: HttpErrorResponse{headers: HttpHeaders{normalizedNames: Map{},lazyUpdate: null,lazyInit: function () { ... }}, status: 404, statusText: 'Not Found', url: ' http://localhost:9876 /api/seLOG : HttpErrorResponse{headers: HttpHeaders{normalizedNames: Map{}, lazyUpdate: null, lazyInit: function () { ... }}, status: 404, statusText: 'Not Found', url: ' http:// /localhost:9876/api/services/ui/form/portal ', ok: false, name: 'HttpErrorResponse', message: ' http://localhost 的 Http 失败响应:9876/api/services/ui/form/portal: 404 Not Found', 错误: 'NOT FOUND'} Chrome 66.0.3359 (Mac OS X 10.12.6): Executed 0 of 37 SUCCESS (0 secs / 0 secs) LOG: HttpErrorResponse{headers: HttpHeaders{normalizedNames: Map{ },lazyUpdate:null,lazyInit:function(){...}},状态:404,statusText:'未找到',url:' http://localhost:9876/api/seChrome 66.0.3359(Mac OS X 10.12.6):执行 1 of 37(跳过 36)成功(1.638 秒 / 1.52 秒)

在该日志输出中,我看到Instantiated哪个在我的模拟构造函数中,但我没有看到我的getForm方法被调用,而是从服务中调用了真正的方法。

Chrome 66.0.3359 (Mac OS X 10.12.6) 错误已断开连接未定义 27 05 2018 17:35:58.128:

有什么帮助吗?

0 投票
0 回答
228 浏览

angular - 管用材料如何测试

我无法理解我的管道测试有什么不正确的地方。

它是用于从数组创建 MatTableDataSource 的管道。

这是我的管道:

该测试用于检查数组是否为空,它返回一个空的 matTableDataSource

此测试失败:

而且我不明白为什么,我还控制台记录了“toEqual”的两个部分并且是相同的。

有人可以告诉我我做错了什么吗?

0 投票
1 回答
3939 浏览

angular - Angular 5&6 测试错误:无法加载指令 AppComponent 的摘要

运行时ng test,我收到一条错误消息:

我不确定为什么会收到此错误,因为我正在引用和声明 AppComponent。

这是我的 app.component.spec.ts

为什么会抛出这个错误,我该如何解决这个错误?

编辑:我正在使用 Angular CLI 的默认 tsconfig 和 tsconfig.spec 文件。同时我已经升级到 Angular 6,我得到了 sam 错误。即使使用干净的配置文件创建新项目并替换 src 文件夹也无法解决错误。

0 投票
0 回答
1211 浏览

angular - PrimeNG DataTable 中的单元测试 ng-template 内容

我有组件

带模板(使用带有可扩展列的 PrimeNG 数据表)

我知道如何测试普通列:

如何测试可扩展列中呈现的内容?我在 DOM 中找不到它。此 DOM 来自 Chrome(在调试器中断时获取):

0 投票
1 回答
475 浏览

angular - 如何在 Linux 机器中自动重新加载 Angular 4 测试用例。

我在前端使用 Angular 4 中的测试用例。但是每当我对文件进行任何更改时,它都不会自动反映。每次更改都需要花费大量时间后,我需要运行“ng test”命令。请告诉我任何方式,以便每次更改后我都会自动重新加载。

它适用于窗口机器中的相同代码。但不能在ubuntu机器上工作。我正在使用 Linux。

谢谢,

0 投票
1 回答
1611 浏览

angular - 单元测试依赖于另一个使用 InjectionToken 的服务的 Angular 服务

我正在对一个看起来像这样的 Angular 服务进行单元测试:

FooService是同一模块中的服务。它使用 InjectionTokens 注入一些值。

所有三个文件都是同一个模块的一部分,该模块的设置如下:

这在应用程序本身中运行良好。现在我正在data.service.ts为提供的 InjectionTokens 编写单元测试并遇到问题。

当我运行测试时,我收到一条错误消息

我尝试在测试提供程序中使用空对象而不是字符串,但仍然得到相同的错误。我需要提供这些令牌的另一种方式吗?