问题标签 [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.
unit-testing - 使用 TestBed 进行 Angular2 测试获取区域未定义错误
我一直在研究 Angular 教程https://angular.io/docs/ts/latest/guide/testing.html来构建我的第一个单元测试。在我到达 TestBed 示例之前,我能够让一切正常工作。当我将 TestBed 添加到组合中时,我得到“未捕获的 ReferenceError:未定义区域”。
在我的规范包中,我区域声明并初始化了 Testbed 环境。
规格捆绑
测试文件
});
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 包含了角度文件:*
unit-testing - Angular 2:如何在单元测试时模拟 ChangeDetectorRef
我刚刚开始进行单元测试,我已经能够模拟我自己的服务以及一些 Angular 和 Ionic,但无论我做什么都ChangeDetectorRef
保持不变。
我的意思是这是什么魔法?
我已经尝试了一切async
,,,,fakeAsync
。injector([ChangeDetectorRef], () => {})
没有任何效果。
javascript - angular2/jasmine 注入模拟服务不调用间谍
尝试使用 jasmine 对 angular2 应用程序进行单元测试,但是当我尝试注入服务时,间谍不会接听注入的调用。
测试套件:
测试间谍自己工作(使用模拟服务和直接调用),并且组件调用模拟服务而不是真实服务,返回测试数据:
尝试直接注入 MockRoomService 。尝试将间谍放在 RoomService 对象而不是模拟对象上。两者都没有返回间谍被调用。
模拟服务:
真实服务:
零件:
帮助?
unit-testing - Angular2:创建动态测试模块的更好方法
在我们的 angular2 应用程序中,我们创建了一些模块。例如appModule、componentModule 等。appModule 是我们的顶级模块。
在编写单元测试时,我们创建了 TestBed,我们根据需要提供各个组件。这使我们的测试运行得更快。但是,它引入了一个问题,即每当有人添加新组件时,它都会使所有测试失败,直到我们在 testBed 创建中包含相同的测试。
有没有更好的办法?
angularjs - Npm test 抛出错误,但应用程序运行时没有错误
我一直在开发 Angular 2/TypeScript 应用程序。最初我的应用程序和单元测试运行良好。但是现在我在运行单元测试时遇到了错误。
在我使用 soho-dropdown 元素的“closeOnSelect”属性之前,我的单元测试运行良好。
注意:应用程序工作正常,这是 soho-dropdown 组件的一个属性,但单元测试似乎无法识别它。
我尝试像在我的应用程序中那样导入库,但是当我这样做时出现不同的错误,我看到其他人在两次导入库时遇到了这个错误,所以我把它拿出来以显示这个问题的根源。
我可以分享我的文件,只是让我知道哪些。我不想拥挤文本。
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 的回答,我更新的组件类现在如下所示,并且单元测试现在都通过了:)
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 是一个可能的解决方案,有人愿意解释我将如何使用它吗?
javascript - 使用 Angular2 TestBed 模拟具有非具体类接口参数的服务
我有一个组件,我正在尝试使用 TestBed 设置和测试。
该组件包含一个在构造函数中具有参数的类,该参数是接口,而不是具体类。我选择使用的任何类都可以满足这个接口(无论是真正的类,还是用于单元测试的 mok 类)。但是当我在 TestBed 中构建使用此服务的组件时,我无法弄清楚如何将该参数定义到 TestBed 配置中。
这是该组件的 TestBed 配置:
在 TestBed 中构建有问题的服务是 ProcedureDataService 。它的定义如下:
ProcedureDataService
is的构造函数中的一个参数IOpenService
的定义是:
如您所见,这是一个接口,而不是具体的类。
在我的服务单元测试中,我们通过如下实现来模拟 IOpenService:
这在 ProcedureDataService 服务单元测试中效果很好。当然,在实际代码中,我们使用完整实现的文件打开服务来实现 IOpenService,该服务可以正确获取数据。
但是在尝试在组件内部使用此服务时,我收到以下错误:
这是有道理的,所以我试图弄清楚如何告诉 TestBed 我有一个我希望使用的 IOpenService 的具体类实现。我试过这个,但它失败了:
编译器告诉我:
我仍然得到:
那么,我如何指示TestBed
我有一个接口参数()的特定类(mockOpenService
)实现,该接口参数()是为测试此组件()而提供IOpenService
的服务()所需的?ProcedureDataService
PanelContentAreaComponent
angular - Angular2 测试床注入
我正在myService
Angular 2 中测试一个依赖于Router
. 由于我使用的是 Angular 的组件之一,我将使用 Angular 的TestBed
类。所以我设置beforeEach
如下:
其中RouterStub
定义为
现在我写我的测试失败(红色,绿色,重构......)
并且测试按预期失败。但是,我现在尝试使用该函数编写相同的测试TestBed
Inject
,即
即使我认为该Inject
函数会Router
从TestBed
. 我不明白什么?