相关疑难解决方法(0)

进行组件测试以具有主体或模拟Renderer2

在我们的组件之一中,我们用于Renderer2向body元素添加和删除一些CSS类/样式。为此,我们只需执行以下操作:

this.renderer.setStyle(document.body, 'padding-left', '10px');
this.renderer.addClass(document.body, 'modal-container--opened');
Run Code Online (Sandbox Code Playgroud)

一旦运行测试,就会遇到错误:

无法读取未定义的属性“添加”

无法设置未定义的属性“ padding-left”

因此,有角度的testBed似乎没有创建任何body元素。

在我们的测试配置中,如何创建模拟的body元素?因此,我们可以对该元素运行测试,并查看渲染器是否正确应用了样式/类。

似乎也无法嘲笑Renderer2。

我们试图创建一个间谍:

let renderer: jasmine.SpyObj<Renderer2>;
renderer = jasmine.createSpyObj('renderer', ['addClass', 'removeClass', 'setStyle']);
Run Code Online (Sandbox Code Playgroud)

然后进入TestBed.configureTestingModule(也进行了测试,overrideProviders但未获得更多成功):

{ provide: Renderer2, useValue: renderer }
Run Code Online (Sandbox Code Playgroud)

但是Angular完全忽略了此覆盖。

如何能够测试我们的组件行为,对其进行操作document.body

jasmine angular

4
推荐指数
2
解决办法
3101
查看次数

标签 统计

angular ×1

jasmine ×1