问题标签 [testbed]
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 - 测试台:错误:无法解析 PriDateInput 的所有参数:(?)
我正在尝试使用创建一个Angular Component
,TestBed
但出现以下错误:
错误:无法解析 PriDateInput 的所有参数:(?)。错误属性:Object({ ngSyntaxError: true })
该组件PriDateInput
具有AppContextService
应注入的服务。我想AppContextService
通过替换它来模拟MockAppContextService
.
跟随.spec
文件:
遵循我的组件的摘录:
如果您认为您需要更多信息,请询问:)
angular - Async beforeEach 在每个测试单元之前/之后完成(它)
嘿,我是 angular 6(又名 angular)测试的新手,我有一个问题是要重新评估我迄今为止看到的每一个测试。
我们先来看一个简单组件的简单测试(由cli生成)
我有一个主要问题:
1.我如何确定每个 Async beforeEach 调用是在每个测试单元(又名它)之前完成的?是否存在这种调用会在每次调用之后发生的情况,因为它毕竟是异步调用?
angular - 角度测试:覆盖以使用模板而不是 templateUrl
我有一个包含iframe
. 为了防止在测试中从 iframe 加载不存在的 URL,我想模拟组件的模板。我以为我可以使用它,TestBed.overrideComponent()
但它没有效果。测试运行时,我可以看到原始模板存在并且 iframe 加载不存在的 url。
我尝试了什么:
如何覆盖要使用的组件template
而不是templateUrl
?
angular - Angular 使用依赖于另一个服务的服务模拟
我正在为我使用模拟服务的组件编写测试。但是这个服务有一个属性,它引用另一个服务并利用服务内部的一些方法。我怎样才能为此创建适当的模拟。
angular - Angular:如何在共享模块中定义测试组件
我正在尝试为主条目模块中定义的组件编写单元测试。由于该组件使用共享模块中定义的其他组件,我想模拟它们而不是创建它们。所以,我从模拟组件开始。这是一个例子:
现在,由于我的共享模块正在导出frt-dados-gerais
组件,因此我尝试使用如下代码覆盖该模块:
如您所见,我尝试取消导出,这样我就不会收到错误提示该组件有两个定义。我显然错过了一些东西,因为我总是收到NullInjectorError: No provider for DadosPessoaisComponent
错误。
有人可以帮忙吗?
编辑:好的,终于弄清楚了。如此愚蠢的错误......所以,我使用TestBed.get
而不是TestBed.createComponent
创建被测组件......这就是我得到NullInjectorError
异常的原因......
angular - 茉莉花单元测试中的模拟助手类
我想对使用辅助类的角度组件进行单元测试。辅助类及其函数不应成为此测试的一部分,而应被模拟。该组件可能如下所示:
我想将功能helper.check()
从单元测试中排除,并假设它返回true
(或在第二次测试中返回错误)。所以我希望我的测试看起来像这样:
css - Angular 单元测试 - 忽略样式表
我正在尝试加快一个相当大的非 cli Angular 应用程序的单元测试,并有一个想法:如果我跳过样式表怎么办?运行测试的最慢步骤(相差很大)是 Webpack 编译应用程序中包含的数千个 scss 样式表。
我已经更改了 webpack 设置来为这些文件加载空模块:
但是当然 Angular 测试平台的元数据解析器现在抱怨模块是空的..
我认为我需要在这里做的是将每个样式表加载为空字符串,或者设置 Testbed 以忽略组件元数据中对 .scss 文件的引用。
有没有办法完成这些解决方案之一,或者是否有更聪明的方法来解决这个问题?
angular - 为什么我需要调用detectChanges / whenStable 两次?
第一个例子
我有以下测试:
如您所见,有一个超级简单的组件,它仅显示由Promise
. 有两种测试,一种失败,一种通过。这些测试之间的唯一区别是通过fixture.detectChanges(); await fixture.whenStable();
两次调用的测试。
更新:第二个例子(2019/03/21 再次更新)
这个例子试图调查与 ngZone 的可能关系:
这些测试中的第一个(明确使用 ngZone)导致:
第二个测试日志:
我有点期望测试在角度区域中运行,但事实并非如此。问题似乎来自以下事实
为了避免意外,传递给 then() 的函数永远不会被同步调用,即使是已经解决的 promise。(来源)
在第二个示例中,我通过.then(x => x)
多次调用来引发问题,这只不过是将进度再次放入浏览器的事件循环中,从而延迟结果。到目前为止,据我所知,调用await fixture.whenStable()
基本上应该说“等到该队列为空”。正如我们所看到的,如果我明确地在 ngZone 中执行代码,这实际上是有效的。然而,这不是默认设置,我在手册中找不到我打算以这种方式编写测试的任何地方,所以这感觉很尴尬。
await fixture.whenStable()
在第二次测试中实际上做了什么?源代码显示,在这种情况下将fixture.whenStable()
只是return Promise.resolve(false);
. 所以我实际上尝试替换await fixture.whenStable()
为await Promise.resolve()
,实际上它具有相同的效果:这确实具有暂停测试并从事件队列开始的效果,因此如果我经常调用任何承诺,传递给的回调valuePromise.then(...)
实际上会被执行await
足够的。
为什么我需要await fixture.whenStable();
多次调用?我用错了吗?这是预期的行为吗?是否有任何关于它打算如何工作/如何处理这个问题的“官方”文档?
angular - Ionic 4:创建模拟存储
我正在尝试在新的 Angular 7 / Ionic 4 应用程序中使用 Testbed,但无法运行任何测试,因为我的组件依赖于 Ionic 本机插件storage。
app.component.spec.ts
并创建了我自己的StorageMock:
但是,当我运行测试时,我仍然看到:
我错过了什么?
angular - 角度测试台测试路线找不到模块
我正在尝试使用 TestBed 测试一个简单的重定向,但一直看到以下错误:
Error: Uncaught (in promise): Error: Cannot find module ./pages/login/login.module#LoginPageModule
我的测试如下:
我的路线app-routing.module.ts
是:
我LoginPageModule
的是:
我需要做些什么来完成这项工作吗?