问题标签 [ngmock]

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 回答
44 浏览

angular - beforeEach 在 MockRender 调用中没有错误地死掉

我正在使用 ngMocks 测试一个组件,但我的规范一直以“formGroup 需要一个 FormGroup 类型的实例,请提供一个”而失败。

我能够验证component实际上从未设置过。事实上,在我调用的标记行之后的每一行都MockRender没有被调用,beforeEach因此没有设置组件。

正如您所看到的,我试图formGroup在组件中提供一个默认值,以在正在执行它的事情时阻止问题的发生,MockRender但这并没有改变任何事情。

任何想法a)我能做些什么来解决这个问题?b)为什么在我的规范中没有抛出错误而不是抛出错误MockRenderexpect

规格:

TS:

编辑:我在下面的答案中提供了修复,尽管我仍然不太明白为什么会发生错误。

0 投票
0 回答
29 浏览

angular - ng-mocks 没有实例化被测试的组件

我有一个要测试的组件(不是模拟)。它有一些公共和私人领域,比如destroy$ = new Subject();没有@Input. 当我调用 MockRender 并通过 获取组件时fixture.point.componentinstance,字段未定义。构造函数内的控制台日志也不会被触发。那么 MockRender 是做什么的呢?为什么它没有以正确的方式实例化组件类?还是我以错误的方式使用库?这是预期的行为吗?

0 投票
0 回答
24 浏览

angular - ng-mocks 错误:TypeScript 编译中缺少 MockBuilder/test.deep.spec.ts

我只是像以前的项目一样使用 ng-mocks 模块,但今天我收到以下错误:

0 投票
0 回答
259 浏览

angular - 如何使用 MockBuilder(角度和 ng-mocks)在特定测试中操作提供者

几周前我开始使用 ng-mocks,因为我认为它是为这种情况而设计的,但对于我的生活,我无法弄清楚如何实现它。

简而言之,在定义 MockBuilder/MockRender 之后,可以在嵌套的描述/测试中更改模拟提供者的值吗?

在我的应用程序中,我经常有依赖于根据上下文提供不同数据的服务的组件。在这是静态的情况下,这很容易测试。我将在这里使用 ActivatedRoute 作为示例,因为它让我感到悲伤:

到目前为止,一切都很好。

但在那次测试之后,我想运行另一个修改服务的套件;说id现在将是2。我认为这是角色MockInstance:能够为给定的测试动态更改提供的服务等。

因此,为了继续我的示例,现在我将describe在第一次测试之后在第一个中添加一个嵌套:

该测试将失败,因为新的模拟值从未实现并且routeId保持不变。

我意识到这是一个糟糕的例子。我已经用很多不同的方式重写了这些测试,使用MockInstance.remember或尝试初始化服务实例本身,但没有任何成功。据我所知,MockBuilder 和 MockInstance 似乎并不是要一起使用的,而且在 ng-mocks 网站上也没有这样的例子。似乎为这种情况构建测试的唯一方法是describes使用自己的 MockBuilder 和 MockRender 单独构建每个测试。

还是我最好的选择只是routeId公开并直接操纵它?

0 投票
0 回答
42 浏览

angular - 模拟生成的 API 服务

在我们的 Angular 应用程序中,我们正在使用从 API 生成的服务,并且我们面临着对组件或使用它们的自定义服务进行单元测试的问题。

在定制服务中的使用

并尝试在单元测试中模拟它(我们使用 Jest + Spectator + Ng-Mocks)

这是我们得到的错误(VS Code 下划线)

知道我们如何正确模拟它吗?我尝试指定该方法的每个可选参数,getCurrentConnection但没有效果。pipe由于未定义结果的运算符,没有覆盖方法的模拟将导致单元测试失败。

0 投票
0 回答
46 浏览

angular - Angular:使用 Spectator 模拟路由器 url

我使用createRoutingFactorywithSpectator但出现此错误:

我按照文档创建了我的测试文件:

使用以下方法修复了子组件上的类似错误ng-mocks

但这一次,this.router.url正在我正在测试的组件中使用,而不是在孩子中使用。

我尝试了这样的不同方法:

(更多信息:https ://pretagteam.com/question/how-to-set-data-on-activatedroute-for-spectator-test )但没有运气。

我也没有得到与在 Spectator 中使用createRoutingFactorycreateServiceFactorywith的区别。mocks: [Router](更多信息https://netbasal.com/spectator-v4-a-powerful-tool-to-simplify-your-angular-tests-bd65a0bf317e

0 投票
1 回答
41 浏览

angular - 自动模拟 Angular 组件

问题

在测试 Angular 组件时,我经常偶然发现以下错误消息:

原因

这通常是因为我<app-chip>在模板中使用了一个组件(这里:):

并忘记将模拟组件添加到规范文件中:

我正在使用ng-mocks来模拟组件。

所需的解决方案

我认为,必须手动将模板中使用的组件添加到测试配置中不会有利于开发过程:如果我忘记将我正在使用的组件导入到当前模块中(或者在拼写错误的情况下),构建无论如何都会失败。(因为我不想使用CUSTOM_ELEMENTS_SCHEMA

有没有办法自动将我在模板中使用的所有组件作为 Mocks 添加到声明数组中?

还是有理由不这样做(并继续手动添加它们)?

0 投票
0 回答
12 浏览

angular - 在 ng-mocks 中提供带有 MockBuilder 的 MockStore

如何覆盖提供MockStore提供的MockBuilder中的选择器值

通常使用 Testbed