我使用角度版本6和茉莉花。
当我运行测试时--sourceMap = false
我得到的错误是:未定义videojs
如果可能,我想存根视频。 另外,请注意组件运行正常,它只是单元测试失败。
Videojs是一个用于显示视频等的npm库。
我正在测试的组件
count = 0
for row in csv_data:
if count < 1:
continue
else:
cur.execute ("INSERT INTO part_table_test (ID,SCHOOL_CODE,DISTNAME,AC_YEAR,SCHOOL_NAME,STATE_NAME,BLOCK_NAME,CLUSTER_NAME,VILLAGE_NAME,PINCODE,RURURB,ELECTRIC_YN,SCHMGT,LOWCLASS,HIGHCLASS,COMPUTER,CAL_YN,MEDINSTR1,MEDINSTR2,MEDINSTR3,MEDINSTR4) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)",row)
count+=1
我的单元测试
import { AfterViewInit, Component } from '@angular/core';
declare const videojs: any;
@Component({
selector: 'test-details',
templateUrl: './test-details.component.html'
})
export class TestDetailsComponent implements AfterViewInit {
public videoJSplayer: any;
constructor() {}
ngAfterViewInit(): void {
this.initVideo();
}
public initVideo(): void {
this.videoJSplayer = videojs(
document.getElementById('video_player_id'),
{ controls: true, autoplay: false, preload: 'auto' }
);
}
}
答案 0 :(得分:3)
虽然我同意@ Ryan的回答是更好的方法,但如果你想模拟一个全局变量,你可以在你的规范中设置全局范围的变量。由于它是全球范围的,因此在测试运行后,您需要小心清理它。
beforeEach(() => {
global.videojs = {my: 'mock', object: 'here'};
});
afterEach(() => {
delete global.videojs; // Cleanup
});
旁注:如果更符合您的需求,您可以使用window
代替global
。
答案 1 :(得分:2)
您可以注入一个服务,该服务具有对videojs对象/函数的引用,而不是直接在Component中引用它。然后你可以使用provide / useClass在测试中模拟服务,并为你想要的videojs输入任何函数/值