问题标签 [angular2-testing]
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.
angular - Angular2 异步测试问题与 setTimeout
我正在使用 Angular2.0.1 并试图围绕一个带有一些异步任务的角度组件编写单元测试。我会说,这是一件相当普遍的事情。甚至他们最新的测试示例也包括此类异步测试(请参阅此处)。
但是,我自己的测试永远不会成功,总是以消息失败
长话短说,我花了几个小时来查明问题的实际根源。我正在使用库 angular2-moment,并且在那里我使用了一个名为 amTimeAgo 的管道。此管道包含一个 window.setTimeout(...),它永远不会被删除。如果我删除了 amTimeAgo 管道,测试会成功,否则会失败。
这是一些非常简单的代码来重现该问题:
测试组件.html:
测试组件.ts:
测试模块.ts
testcomponent.spec.ts:
有谁知道如何成功测试这个?我可以以某种方式杀死 afterEach 中的所有“剩余”超时吗?或者我可以以某种方式重置异步代码运行的区域以摆脱这个问题吗?
有没有其他人遇到过这个或知道如何成功测试这个?任何提示将不胜感激。
更新:
@peeskillet 暗示使用 的解决方案后fixture.destroy()
,我开始在我的实际测试中尝试了这个(这里的示例只是重现问题所需的最少代码)。实际的测试包含嵌套的 Promise,否则我不需要async
anddetectChanges
方法。
虽然 destroy 建议很棒并且有助于解决简单测试中的问题,但我的实际测试包含以下语句以确保嵌套的 Promise 得到正确解决:
问题是,在页面中使用 amTimeAgo 管道时,fixture.whenStable()
promise 永远不会得到解决,因此我的断言代码永远不会执行,并且测试仍然会以相同的超时失败。
因此,即使破坏建议适用于给定的简化测试,它也不能让我修复实际测试。
谢谢
本
angular - What is TestBed in Jasmine
I am new to Jasmine with Angular 2, I am frequently working with the TestBed object when writting a Testcase and getting the error:Please call "TestBed.compileComponents" before your test.
How do I solve this error?
angular - Angular2 2.0.0 组件单元测试导致错误:在注入路由器之前引导至少一个组件
查看以前的类似问题,似乎没有一个明确的答案。
这是正在发生的事情。我正在使用 angular-cli 工具构建一个 angular2 应用程序(运行 beta 16,使用 angular 2.0.1 和路由器 3.0.1。
当我运行“ng test”时,我的所有测试都通过了,期待我的 app.component。(ng serve 工作正常等)
这是一些代码:
app.module.ts
app.component.ts
app.component.spec.ts
app.component.html
最后,这是我在运行“ng test”时遇到的错误:
我已经尝试了很多不同的方法来防止这个错误,但不能让这个停止射击!
对此有什么想法吗?
编辑:我追踪到这个组件,我在构造函数中使用路由器:
header.component.ts
那么,如何使用单元测试在该构造函数之前引导组件?
unit-testing - Karma 无法加载 Angular 2 组件
我的 Karma 无法加载 angular 2 组件。删除此错误:
我用 Angular 2 测试教程做所有事情(我只修改了业力中的路径)所以问题必须在路径中。但我不知道如何解决它。
我自己的路:
容器.component.ts
container.component.spec.ts
业力.conf.js
angular - Angular 2 Custom validation unit testing
i'm writing custom angular(Angular 2.0.0) validation, following this guide https://angular.io/docs/ts/latest/cookbook/form-validation.html#!#custom-validation .
Now i'm trying to add unit test to my custom validation directive.
I'm accessing all these object, but no one has any information about the validity of my input. Does anyone has any idea how to access the NgControl of my input inside the Unit Tests, or how can i check for valid/invalid(custom validation) input field.
unit-testing - Angular 2:模板未在测试中更新
我只是想让这项工作。
因此,该runMe
函数没有更改该部分的文本,但runMe
调用了间谍节目。
angular - Angular 2 使用 Jasmine 和 Karma 测试路由器
我在为 Angular 2 中的 router.navigate 编写存根时遇到问题。我目前编写了以下存根。这是角度文档中显示的内容。
但是,当我使用此存根时,会出现以下错误。
我的导航用法如下。
任何帮助,将不胜感激。
只是一个更新......我能够使用我发现在这里引用的非 TestBed 方法进行此测试。但是,如果有人能够弄清楚如何使用 TestBed 方法进行此测试,我将不胜感激。谢谢
unit-testing - Angular 2 测试组件给出“错误:未捕获(承诺):错误:模板解析错误”
我最近制作了一个包含多个组件和服务的 ng2(使用 2.0.1)应用程序。我正在测试(Karma Jasmine)我的HeaderComponent,其中包含我的UserService(它使用扩展的 Http 类)。
我已经从Angular.io Docs复制了简单的测试来监视服务并等待组件初始化后检查服务功能是否已被触发及其内容。每次我使用 fakeAsync(和异步)运行最后一个测试时,它检查 header.component 中 currentUser 变量的内容,我收到以下错误...
这些选择器来自我的AppComponent ...
我的header.component.spec ...
这是我的header.component ...
我怀疑发生此错误是因为我如何初始化我的 TestBed.configureTestingModule()。
我试过了...
- 重新排序 app.module 和 TestBed 模块声明
- 向两个模块添加架构:[CUSTOM_ELEMENTS_SCHEMA]
unit-testing - Angular2如何对自定义验证器指令进行单元测试?
我为输入字段编写了一个非常简单的自定义验证器:
我想对这个验证器进行单元测试。我在 Angular2 页面上阅读了测试属性指令,但没有 css 或 html 发生变化。如何对这个验证器进行单元测试?