问题标签 [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.

0 投票
1 回答
2239 浏览

angular - 测试台:错误:无法解析 PriDateInput 的所有参数:(?)

我正在尝试使用创建一个Angular ComponentTestBed但出现以下错误:

错误:无法解析 PriDateInput 的所有参数:(?)。错误属性:Object({ ngSyntaxError: true })

该组件PriDateInput具有AppContextService应注入的服务。我想AppContextService通过替换它来模拟MockAppContextService.

跟随.spec文件:

遵循我的组件的摘录:

如果您认为您需要更多信息,请询问:)

0 投票
1 回答
8495 浏览

angular - Async beforeEach 在每个测试单元之前/之后完成(它)

嘿,我是 angular 6(又名 angular)测试的新手,我有一个问题是要重新评估我迄今为止看到的每一个测试。

我们先来看一个简单组件的简单测试(由cli生成)

我有一个主要问题:

1.我如何确定每个 Async beforeEach 调用是在每个测试单元(又名它)之前完成的?是否存在这种调用会在每次调用之后发生的情况,因为它毕竟是异步调用?

0 投票
1 回答
2133 浏览

angular - 角度测试:覆盖以使用模板而不是 templateUrl

我有一个包含iframe. 为了防止在测试中从 iframe 加载不存在的 URL,我想模拟组件的模板。我以为我可以使用它,TestBed.overrideComponent()但它没有效果。测试运行时,我可以看到原始模板存在并且 iframe 加载不存在的 url。

我尝试了什么:

如何覆盖要使用的组件template而不是templateUrl

0 投票
0 回答
37 浏览

angular - Angular 使用依赖于另一个服务的服务模拟

我正在为我使用模拟服务的组件编写测试。但是这个服务有一个属性,它引用另一个服务并利用服务内部的一些方法。我怎样才能为此创建适当的模拟。

0 投票
0 回答
1396 浏览

angular - Angular:如何在共享模块中定义测试组件

我正在尝试为主条目模块中定义的组件编写单元测试。由于该组件使用共享模块中定义的其他组件,我想模拟它们而不是创建它们。所以,我从模拟组件开始。这是一个例子:

现在,由于我的共享模块正在导出frt-dados-gerais组件,因此我尝试使用如下代码覆盖该模块:

如您所见,我尝试取消导出,这样我就不会收到错误提示该组件有两个定义。我显然错过了一些东西,因为我总是收到NullInjectorError: No provider for DadosPessoaisComponent错误。

有人可以帮忙吗?

编辑:好的,终于弄清楚了。如此愚蠢的错误......所以,我使用TestBed.get而不是TestBed.createComponent创建被测组件......这就是我得到NullInjectorError异常的原因......

0 投票
1 回答
3474 浏览

angular - 茉莉花单元测试中的模拟助手类

我想对使用辅助类的角度组件进行单元测试。辅助类及其函数不应成为此测试的一部分,而应被模拟。该组件可能如下所示:

我想将功能helper.check()从单元测试中排除,并假设它返回true(或在第二次测试中返回错误)。所以我希望我的测试看起来像这样:

0 投票
1 回答
1178 浏览

css - Angular 单元测试 - 忽略样式表

我正在尝试加快一个相当大的非 cli Angular 应用程序的单元测试,并有一个想法:如果我跳过样式表怎么办?运行测试的最慢步骤(相差很大)是 Webpack 编译应用程序中包含的数千个 scss 样式表。

我已经更改了 webpack 设置来为这些文件加载​​空模块:

但是当然 Angular 测试平台的元数据解析器现在抱怨模块是空的..

我认为我需要在这里做的是将每个样式表加载为空字符串,或者设置 Testbed 以忽略组件元数据中对 .scss 文件的引用。

有没有办法完成这些解决方案之一,或者是否有更聪明的方法来解决这个问题?

0 投票
3 回答
9769 浏览

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();多次调用?我用错了吗?这是预期的行为吗?是否有任何关于它打算如何工作/如何处理这个问题的“官方”文档?

0 投票
3 回答
3352 浏览

angular - Ionic 4:创建模拟存储

我正在尝试在新的 Angular 7 / Ionic 4 应用程序中使用 Testbed,但无法运行任何测试,因为我的组件依赖于 Ionic 本机插件storage

app.component.spec.ts

并创建了我自己的StorageMock

但是,当我运行测试时,我仍然看到:

我错过了什么?

0 投票
1 回答
1588 浏览

angular - 角度测试台测试路线找不到模块

我正在尝试使用 TestBed 测试一个简单的重定向,但一直看到以下错误:

Error: Uncaught (in promise): Error: Cannot find module ./pages/login/login.module#LoginPageModule

我的测试如下:

我的路线app-routing.module.ts是:

LoginPageModule的是:

我需要做些什么来完成这项工作吗?