【问题标题】:Expected spies not being called on an inner function未在内部函数上调用预期的间谍
【发布时间】:2019-04-25 15:56:33
【问题描述】:

我正在用 AngularJS 编写一个应用程序。我正在用业力和茉莉花为我的角度服务编写单元测试。它没有按预期工作,因为单元测试不断给我这些错误:

预期的间谍照片已被调用。

这是我的代码笔,有错误:https://codepen.io/aubz/pen/zXyvbj

这是我的单元测试的代码sn-p:

  it('should process the plain clocking settings', function () {

    ClockingRecordTypeFactory.getRecord('plain', 'here', null, null, null, null, null);

    spyOn(ClockingRecordTypeFactory, 'plain').and.callFake(function () {});
    spyOn(ClockingRecordTypeFactory, 'photo').and.callFake(function () {});
    spyOn(ClockingRecordTypeFactory, 'geo').and.callFake(function () {});
    spyOn(ClockingRecordTypeFactory, 'manual').and.callFake(function () {});

    expect(ClockingRecordTypeFactory.plain).toHaveBeenCalled();
    expect(ClockingRecordTypeFactory.photo).not.toHaveBeenCalled();
    expect(ClockingRecordTypeFactory.geo).not.toHaveBeenCalled();
    expect(ClockingRecordTypeFactory.manual).not.toHaveBeenCalled();

});

以及我要测试的功能:

function getRecord(type, origin, coords, imageData, comments, reason, date) {

    var record = getBaseClockingRecord();

    if (type === 'plain') {
        plain(record);
    }

    if (type === 'photo') {
        photo(record);
    }

    if (type === 'geo') {
        geo(record, coords);
    }

    if (type === 'manual') {
        manual(record);
    }

    return record;
}

【问题讨论】:

    标签: javascript angularjs unit-testing karma-jasmine


    【解决方案1】:

    测试在监视ClockingRecordTypeFactory.plain,但实际上getRecord 函数调用了本地函数plain,因此根本不会调用间谍。

    您可以像这样更改getRecord,使间谍按预期工作:

    if (type === 'plain') {
        this.plain(record);
    }
    
    if (type === 'photo') {
        this.photo(record);
    }
    
    if (type === 'geo') {
        this.geo(record, coords);
    }
    
    if (type === 'manual') {
        this.manual(record);
    }
    

    您还需要在测试开始时设置您的间谍,然后再致电getRecord:

    spyOn(ClockingRecordTypeFactory, 'plain').and.callFake(function () {});
    spyOn(ClockingRecordTypeFactory, 'photo').and.callFake(function () {});
    spyOn(ClockingRecordTypeFactory, 'geo').and.callFake(function () {});
    spyOn(ClockingRecordTypeFactory, 'manual').and.callFake(function () {});
    
    ClockingRecordTypeFactory.getRecord('plain', 'here', null, null, null, null, null);
    

    Updated Codepen

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-18
      • 1970-01-01
      • 1970-01-01
      • 2019-02-05
      • 1970-01-01
      • 2020-08-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多