";有角度的";测试组件的方法
The "Angular" way of testing a component
在angular 1中,如果我编写一个组件,我会确保:
- 依赖关系,例如服务,正在被嘲笑
- 单元测试是为组件内的方法编写的
-
组件正在调用服务以检索数据
expect(service.method).toHaveBeenCalled()
- 组件正在更新给定更新模型的视图
我一直在做一些关于Angular 2组件测试的研究,对于我能找到的所有文章,测试似乎是按照以下方式进行的;
- 创建一个返回固定结果的服务模拟(例如:"Test Quote"(
- 期望该视图包含来自模拟服务的结果(例如,某个地方有一个div具有
<div>Test Quote</div>
(
以下是一些此类文章的例子(基本上是谷歌上"Angular 2 Component Testing"的顶级结果(
- http://chariotsolutions.com/blog/post/testing-angular-2-components-unit-tests-testcomponentbuilder/
- http://blog.rangle.io/testing-angular-2-applications/
- http://www.itsmycodeblog.com/angular2-unit-testing-a-component/
- https://developers.livechatinc.com/blog/testing-angular-2-apps-dependency-injection-and-components/
由于NG2在其测试框架@angular/core/testing
中没有提供间谍,因此建议完全避免粗体的步骤?还是我们应该把茉莉花包括在内,只为了接触间谍?
如果您特别希望测试组件渲染,那么您可以使用TestComponentBuilder
,正如您的问题中提到的博客中所解释的那样。
describe('MyComponent', () => {
it('should render list', async(inject([TestComponentBuilder], (tcb: TestComponentBuilder) => {
return tcb.createAsync(MyComponent).then((componentFixture: ComponentFixture) => {
const element = componentFixture.nativeElement;
//... get the element you want to check
componentFixture.detectChanges();
expect(element).toHaveText('test div');
expect(element.querySelectorAll('div').length).toBe(1);
});
}));
}));
如果在组件中调用服务,那么您希望在beforeEachProviders()
或beforeEach()
方法中调用inject
,如:
beforeEach(() => {
addProviders([
provide(LoginService, { useClass: MockLoginService }),
UserService
]);
});
当您想模拟组件中的服务调用时,将jasmine
间谍与and.callThrough
和and.returnValue
等方法一起使用非常有用。此外,请看一下angular团队成员julie raplh的这篇回购文章。
相关文章:
- React重新渲染但未显示正确的组件
- 不能从angular2中的子组件指定父组件中的数组
- 拨打'父亲'函数形式a'儿童'ReactJS中的组件
- React组件等待所需道具进行渲染
- 如何创建带有插槽的vue js组件预加载程序
- KnockoutJS-组件-多个实例
- 铬:“;未捕获的语法错误:意外的标记:"
- 如何更改reactjs中外部/独立组件的状态或属性
- 可以设置“;文件名"发生错误时显示的内联脚本标记的
- JS表单提交"无法使用Chrome数据保护程序加载此页面.尝试重新加载页面.调试信息:POST CISmtuK
- 检测电话窃听,即:<a href="电话:xxx">在UIWebview上
- 如何在react js中将值从一个组件发送到另一个组件
- React Native通过Navigator将用户输入数据传递到选项卡栏IOS中的组件
- React组件-设置页面标题
- 我的shareService在angular 2中发送值工作正常,但当我渲染我的另一个组件时,会获得默认值
- 如何在salesforce aura闪电组件中使用jQuery.val()
- "如果“;不会't在React's组件WillMount()
- 通过“;类“"实例”;使用ReactJS组件代替“props”文字
- Requirejs带有Knockout错误:无法处理绑定“;组件:函数(){return f}"-匿名定义()
- 需要:HTML5/Javascript UI组件做“;匹配“/"数据映射”;UI