当我有业力单元测试时,我有这个问题。
失败:未捕获(承诺):ReferenceError:FB未定义
我已经在index.html文件中添加了以下脚本:
<script type="text/javascript" src="https://connect.facebook.net/en_US/sdk.js"></script>
这是我的auth.service.ts
文件。
constructor(
private http: HttpClient,
private fb: FacebookService
) {
this.token = localStorage.getItem('token');
if (this.token) this.isLoggedIn = true;
else this.isLoggedIn = false;
let initParams: InitParams = {
appId: environment.FACEBOOK_APP_ID,
xfbml: true,
version: 'v2.8'
};
fb.init(initParams);
}
当我进行单元测试时,根本没有加载https://connect.facebook.net/en_US/sdk.js
文件。
我该如何解决这个问题?
感谢。
答案 0 :(得分:3)
首先您需要在files
中添加karma.config.js
配置,将外部javascript文件加载到Karma测试环境中,如下所示:
files: [
'https://connect.facebook.net/en_US/sdk.js'
],
crossOriginAttribute: false,
然后确保您的测试执行 NOT IN async
模式。
通常情况下,测试是在异步模式下进行的,如下所示:
it('should create the app', async(() => {
const fixture = TestBed.createComponent(AppComponent);
const app = fixture.debugElement.componentInstance;
expect(app).toBeTruthy();
}));
只需删除async
即可,如下所示:
it('should create the app', (() => {
const fixture = TestBed.createComponent(AppComponent);
const app = fixture.debugElement.componentInstance;
expect(app).toBeTruthy();
}));
希望这能解决您的问题。