问题标签 [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 回答
4996 浏览

unit-testing - 使用 TestBed 进行 Angular2 测试获取区域未定义错误

我一直在研究 Angular 教程https://angular.io/docs/ts/latest/guide/testing.html来构建我的第一个单元测试。在我到达 TestBed 示例之前,我能够让一切正常工作。当我将 TestBed 添加到组合中时,我得到“未捕获的 ReferenceError:未定义区域”。

在我的规范包中,我区域声明并初始化了 Testbed 环境。

规格捆绑

测试文件

});

0 投票
1 回答
66 浏览

unit-testing - JSPM 和 testbench 以及无法解释的“testing.js”输出

我们已经拉了几天的头发,似乎无法真正抓住实际问题。我们想创建一个测试平台,以增加我们的代码覆盖率,但事实证明这并不像预期的那么容易。

包含正确的区域文件后,通过从角度查看 QuickStart,我们发现我们需要调用 TestBed.initTestEnvironment。其中需要参数,我们导入的:

但是,一旦我们尝试通过 Karma(使用 jasmine)运行它,我们就会遇到 404:

查看“jspm_packages/npm/@angular/compiler@2.3.0/testing.js”,我们很快发现它保存了错误的信息:

而不是预期的:

如果我手动更正此问题,则一切正常。所以我的问题是: 我们如何防止 JSPM 或任何人生成错误的 testing.js 文件?

我们的想法是,出于某种原因,jspm 认为 compiler-testing.umd.js 文件是一个文件夹,因此将 /index 附加到它

*我们通过 config.js 包含了角度文件:*

0 投票
5 回答
17313 浏览

unit-testing - Angular 2:如何在单元测试时模拟 ChangeDetectorRef

我刚刚开始进行单元测试,我已经能够模拟我自己的服务以及一些 Angular 和 Ionic,但无论我做什么都ChangeDetectorRef保持不变。

我的意思是这是什么魔法?



我已经尝试了一切async,,,,fakeAsyncinjector([ChangeDetectorRef], () => {})

没有任何效果。

0 投票
1 回答
3340 浏览

javascript - angular2/jasmine 注入模拟服务不调用间谍

尝试使用 jasmine 对 angular2 应用程序进行单元测试,但是当我尝试注入服务时,间谍不会接听注入的调用。

测试套件:

测试间谍自己工作(使用模拟服务和直接调用),并且组件调用模拟服务而不是真实服务,返回测试数据:

尝试直接注入 MockRoomService 。尝试将间谍放在 RoomService 对象而不是模拟对象上。两者都没有返回间谍被调用。

模拟服务:

真实服务:

零件:

帮助?

0 投票
0 回答
672 浏览

unit-testing - Angular2:创建动态测试模块的更好方法

在我们的 angular2 应用程序中,我们创建了一些模块。例如appModule、componentModule 等。appModule 是我们的顶级模块。

在编写单元测试时,我们创建了 TestBed,我们根据需要提供各个组件。这使我们的测试运行得更快。但是,它引入了一个问题,即每当有人添加新组件时,它都会使所有测试失败,直到我们在 testBed 创建中包含相同的测试。

有没有更好的办法?

0 投票
1 回答
102 浏览

angularjs - Npm test 抛出错误,但应用程序运行时没有错误

我一直在开发 Angular 2/TypeScript 应用程序。最初我的应用程序和单元测试运行良好。但是现在我在运行单元测试时遇到了错误。

在我使用 soho-dropdown 元素的“closeOnSelect”属性之前,我的单元测试运行良好。

注意:应用程序工作正常,这是 soho-dropdown 组件的一个属性,但单元测试似乎无法识别它。

我尝试像在我的应用程序中那样导入库,但是当我这样做时出现不同的错误,我看到其他人在两次导入库时遇到了这个错误,所以我把它拿出来以显示这个问题的根源。

我可以分享我的文件,只是让我知道哪些。我不想拥挤文本。

0 投票
1 回答
3401 浏览

angular - 使用Testbed的angular2测试组件出错

尝试TestBed通过一个简单的示例在 angular-2 中学习此测试实用程序,并遇到了我的第一个阻止程序。google 或 SO 搜索没有产生任何匹配的示例,

所以,我有一个非常基本的组件header如下 -

然后将其规格如下 -

运行业力测试正在抛出 -Error: No provider for String! in karma.entry.js

karma.entry.js 基本上只是为 TestBed 设置测试环境配置,然后通过我的规范文件夹中的每个测试,下面是我的 karma.entry.js

如果我从组件类的构造函数中删除参数,则测试通过,所以我认为我缺少一些预配置,导致TestBed.createComponent(HeaderComponent)无法使用字符串类型参数正确编译组件的构造函数。

任何线索我可能会错过什么?


更新:

如果它对任何人都有帮助 - 基于@mrkosima 的回答,我更新的组件类现在如下所示,并且单元测试现在都通过了:)

0 投票
1 回答
3998 浏览

unit-testing - TestBed:通过模块导入时组件无法编译

我目前正在尝试为在其 html 中使用另一个组件标记的组件编写一组单元测试。

但是我似乎无法编译这个其他组件。我已经尝试了几种使用 NO_ERROR_SCHEMA, 1-3 beforeEach'es 的方法。唯一有效的方法是这样的

这并不是真正的最佳实践方式,并且在某种程度上违背了每个块之前的目的。我试过看看如何模拟它,但我找不到任何资源来解释 overridecomponent 函数的工作原理,或者模拟一般如何与 jasmine 一起工作。

查看来自 rangle.io 的几个视频,他们编写了这样的 beforeEach 块:

这无法编译 bm-panel 组件的 TemplateUrl。我也尝试直接声明组件而不是通过模块,但它没有效果。

PanelContainerComponent(bm-panel)是通过AssignmentFormModule中的一个模块导入的,这会使compileComponent无法编译吗?

如果 overrideComponent 是一个可能的解决方案,有人愿意解释我将如何使用它吗?

0 投票
1 回答
3791 浏览

javascript - 使用 Angular2 TestBed 模拟具有非具体类接口参数的服务

我有一个组件,我正在尝试使用 TestBed 设置和测试。

该组件包含一个在构造函数中具有参数的类,该参数是接口,而不是具体类。我选择使用的任何类都可以满足这个接口(无论是真正的类,还是用于单元测试的 mok 类)。但是当我在 TestBed 中构建使用此服务的组件时,我无法弄清楚如何将该参数定义到 TestBed 配置中。

这是该组件的 TestBed 配置:

在 TestBed 中构建有问题的服务是 ProcedureDataService 。它的定义如下:

ProcedureDataServiceis的构造函数中的一个参数IOpenService的定义是:

如您所见,这是一个接口,而不是具体的类。

在我的服务单元测试中,我们通过如下实现来模拟 IOpenService:

这在 ProcedureDataService 服务单元测试中效果很好。当然,在实际代码中,我们使用完整实现的文件打开服务来实现 IOpenService,该服务可以正确获取数据。

但是在尝试在组件内部使用此服务时,我收到以下错误:

这是有道理的,所以我试图弄清楚如何告诉 TestBed 我有一个我希望使用的 IOpenService 的具体类实现。我试过这个,但它失败了:

编译器告诉我:

我仍然得到:

那么,我如何指示TestBed我有一个接口参数()的特定类(mockOpenService)实现,该接口参数()是为测试此组件()而提供IOpenService的服务()所需的?ProcedureDataServicePanelContentAreaComponent

0 投票
1 回答
1055 浏览

angular - Angular2 测试床注入

我正在myServiceAngular 2 中测试一个依赖于Router. 由于我使用的是 Angular 的组件之一,我将使用 Angular 的TestBed类。所以我设置beforeEach如下:

其中RouterStub定义为

现在我写我的测试失败(红色,绿色,重构......)

并且测试按预期失败。但是,我现在尝试使用该函数编写相同的测试TestBed Inject,即

即使我认为该Inject函数会RouterTestBed. 我不明白什么?