如何使用Karma在组件测试中存根Google gapi全局变量

时间:2017-11-28 20:50:45

标签: angular unit-testing karma-jasmine gapi

我试图在我的角度4项目中设置测试,以获得使用Google gapi的服务。 我遇到的问题是变量是全局声明但不是模拟的,因此当我运行测试时,我得到以下错误:

  

ReferenceError:未定义gapi

如何模拟gapi全局变量(及其对load和auth2的调用)?

这是我的2个类(实现和测试类)

组件类

declare const gapi: any;

@Component({
  selector: 'app-register-google',
  templateUrl: './register-google.component.html',
  styleUrls: ['./register-google.component.css']
})

export class RegisterGoogleComponent implements OnInit, AfterViewInit {...}

测试课

describe('RegisterGoogleComponent', () => {

  beforeEach(async(() => {

    TestBed.configureTestingModule({
      declarations: [RegisterGoogleComponent]
    })
      .compileComponents();
  }));

  it('should create', () => {
    expect(component).toBeTruthy();
  });
});

1 个答案:

答案 0 :(得分:2)

我在使用Google API常量时遇到了类似的问题。

@estus是正确的;您可以在beforeEach块中的window上定义全局变量:

beforeEach(() => {
  fixture = TestBed.createComponent(MyComponent);
  component = fixture.componentInstance;

  window['gapi'] = {
    load() {
      return null;
    },
    anotherFunction() {
      return null;
    }
  }
}