【问题标题】:Jasmine: Expected spy <function> to have been called errorJasmine:预期的间谍 <function> 已被称为错误
【发布时间】:2018-04-08 22:11:34
【问题描述】:

在我的 Angular 应用程序中,我正在尝试为以下场景编写一个测试用例,但出现错误“预期间谍重新邀请已被调用。”。我在“jasmine-core:^2.5.2”和“karma:^1.3.0”上进行测试。我写过类似的测试用例,它们通过了,没有错误。

在我的控制器文件中:

function reinvite() {

        var emailsToReInvite = $j.map($scope.settingsData.userSettingsDetails, function(user) {
             if(user.reInviteChecked){
                return user.email;  
            }
        });

        if (emailsToReInvite.length >= 1) {

            var invitation = { invitees: emailsToReInvite, listId: listId};
            invitation = JSON.stringify(invitation);

            inviteCollaboratorsModalDataService.reinvite(invitation).then(
                function success(response) {
                    if(response.data.messages[0].code == 214){
                        $scope.showReinviteSuccess = true;

                        }
                    }else{
                        $scope.showReinviteSuccess = false;
                    }
                }
            );
        }
    }

还有我的规范文件:

describe('settingsModalController', function() {
var controllerUnderTest = "settingsModalController";    
var controllerResolver, rootScope, injector, $scope, inviteCollaboratorsModalDataService

beforeEach(function(){
    angular.mock.module('sharedListApp');

    inject(function($controller, $rootScope, $injector){
        controllerResolver = $controller;
        rootScope = $rootScope;
        injector = $injector;
    });

    $scope = rootScope.$new();
    inviteCollaboratorsModalDataService = injector.get('uiCommon.inviteCollaboratorsModalDataService');
});

it("should send re-invitation mail to selected users successfully", shouldReinviteSelectedUsers);

function shouldReinviteSelectedUsers() {
    var $q = injector.get('$q');
    $scope.settingsData = {
        userSettingsDetails: [{email: 'abc@xyz.com'}]
    };
    var data = { 
        messages: [ { code: 214 }],
        invite: {
            invitation: $scope.settingsData
        }
    };
    var response = { data: data };
    var mockResult = new $q.defer();
    mockResult.resolve(response);

    spyOn(inviteCollaboratorsModalDataService, 'reinvite').and.returnValue(mockResult.promise);

    controllerResolver(controllerUnderTest, { $scope: $scope });

    $scope.reinvite();
    $scope.showReinviteSuccess = true;
    $scope.$apply();

    expect(inviteCollaboratorsModalDataService.reinvite).toHaveBeenCalled();
    expect($scope.showReinviteSuccess).toBe(true);
}

}

我做错了什么或者我错过了什么?提前致谢。

【问题讨论】:

    标签: jasmine


    【解决方案1】:

    好的,所以我错过了在我的规范文件中添加 $scope.settingsData 的一个变量,这就是为什么我的规范代码没有解析到控制器的第一个“if”循环中。通过添加 'reInviteChecked: true' 使其工作:

    $scope.settingsData = {
        userSettingsDetails: [{email: 'abc@xyz.com', reInviteChecked: true}]
    };
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-05
      • 1970-01-01
      • 1970-01-01
      • 2018-06-07
      • 2023-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多