【问题标题】:Error : Yam is Undefined, while unit testing错误:Yam 未定义,而单元测试
【发布时间】:2018-07-09 21:44:54
【问题描述】:

我正在对一个应用程序进行单元测试,但我遇到了一个问题。我在下面用代码 sn-p 发布问题。

此代码用于弹出 yammer 窗口。

yam 变量是这样在组件外声明的

declare var yam: any;

@Component({
  selector: 'cs-artifact-related',
  templateUrl: './artifact-related.component.html',
  styleUrls: ['./artifact-related.component.css']
})

在下面的方法中使用

public yammerWindowPopup(ownername, prjName): void {
    yam.platform.yammerShareOpenPopup({
      customButton: true,
      defaultMessage: this.getYammerWindowPopupMessage(ownername, prjName),
      pageUrl: this.copyArtifactUrl.split('?')[0]
    });
  }

我已经编写了以下代码来对此进行单元测试

it('should call yammerWindowPopup method', () => {
    component.yammerWindowPopup("Owner1", "Test Project");
});

当我运行 ng test 时出现此错误

yam is not defined

限制是我不能在里面声明 yam,因为它是预先编写的代码。

所以我有两个问题

  1. 如何访问spec文件中定义在组件外部的变量?
  2. 如何解决上述错误? 请帮忙!

【问题讨论】:

    标签: angular unit-testing jasmine karma-jasmine


    【解决方案1】:

    Yam 是第三方依赖项。因此,您不会将其包含在单元测试中。 测试依赖于第三方模块的组件或服务的最佳实践是模拟第三方依赖项并在单元测试中使用模拟代替实际的第三方代码。

    第 1 步:模拟山药:

    const yamMock = {
        platform: {
            yammerShareOpenPopup: () => {} //just an empty function
        }
    }
    

    第 2 步:使用 yamMock 代替实际的 yam - 将其放入组件的单元测试配置中:

    beforeEach(() => {
        TestBed.configureTestingModule({
            providers: [
                { 
                    provide: yam,
                    useValue: yamMock
                }
            ]
        })
    });
    

    Step3:窥探mocked yam yammerShareOpenPopup函数,看是否被调用:

    it('should call yammerWindowPopup method', () => {
        spyOn(yam.platform, 'yammerShareOpenPopup');
    
        component.yammerWindowPopup("Owner1", "Test Project");
    
        expect(yam.platform.yammerShareOpenPopup).toHaveBeenCalled();
    });
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-22
    • 1970-01-01
    • 1970-01-01
    • 2019-12-10
    • 2019-03-10
    • 1970-01-01
    • 2019-06-19
    • 2018-06-05
    相关资源
    最近更新 更多