期望的间谍没有被调用内部功能

问题描述 投票:1回答:1

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

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

这是我的codepen与bug:https://codepen.io/aubz/pen/zXyvbj

这是我的单元测试的代码片段:

  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个回答
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

© www.soinside.com 2019 - 2024. All rights reserved.