ReferenceError:在Angular 5 Karma单元测试中未定义FB

时间:2017-12-09 08:20:46

标签: angular karma-jasmine

当我有业力单元测试时,我有这个问题。

Error Screenshot

  

失败:未捕获(承诺):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文件。

我该如何解决这个问题?

感谢。

1 个答案:

答案 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();
  }));

希望这能解决您的问题。