Angularjs Bootstrap$modal控制器组件的角度测试

Angularjs Bootstrap$modal控制器组件的角度测试,angularjs,unit-testing,Angularjs,Unit Testing,下面是我试图进行单元测试的控制器的部分代码,但我运气不好。我一直收到错误消息error:spyOn无法为account()找到要监视的对象 控制器 $scope.confirmDelete = function (account) { var modalInstance = $modal.open({ templateUrl: '/app/accounts/views/_delete.html', controller:

下面是我试图进行单元测试的控制器的部分代码,但我运气不好。我一直收到错误消息error:spyOn无法为account()找到要监视的对象

控制器

    $scope.confirmDelete = function (account) {

        var modalInstance = $modal.open({
            templateUrl: '/app/accounts/views/_delete.html',
            controller: function (global, $scope, $modalInstance, account) {
                $scope.account = account;

                $scope.delete = function (account) {
                    global.setFormSubmitInProgress(true);
                    accountService.deleteAccount(global.activeOrganizationId, account.entityId).then(function () {
                        global.setFormSubmitInProgress(false);
                        $modalInstance.close();
                    },
                    function (errorData) {
                        global.setFormSubmitInProgress(false);
                    });

                };

                $scope.cancel = function () {
                    global.setFormSubmitInProgress(false);
                    $modalInstance.dismiss('cancel');
                };
            },
            resolve: {
                account: function () {
                    return account;
                }
            }
        });

        modalInstance.result.then(function (asset) {
            $scope.getAll(1, 100);
        }, function () {
            console.log('Modal dismissed at: ' + new Date());
        });
    };
测试

describe("confirmDelete() function", function () {
        var controller, scope;

        // sets scope of controller before each test
        beforeEach(inject(function ($rootScope, _$modal_) {
            scope = $rootScope.$new();
            controller = $controller('AccountsController',
                {
                    $scope: scope,
                    $stateParams: mockStateParams,
                    $state: mockState,
                    // below: in order to call the $modal have it be defined and send on the mock modal? 
                    $modal: _$modal_, 
                    //modalInstance: mockModalInstance,
                    global: mockGlobal,
                    accountService: mockAccountSrv
                });
        }));

        beforeEach(inject(function ($modal) {
            spyOn($modal, 'open');
            spyOn(scope.modalInstance, "account");
        }));

        it("make sure modal promise resolves", function () {
            scope.confirmDelete(mockAccountSrv.account);
            expect($modal.open).toHaveBeenCalled();
        });

    });

问题是,在第二个
beforeach
中,您试图监视
scope.modalInstance
,而该字段不存在。因此,茉莉花找不到监视的对象

另一个问题是,您使用了模态的
结果
承诺,因此您必须告诉您的mock返回它,以免得到TypeError

beforeEach(inject(function ($modal, $q) {
    spyOn($modal, 'open').and.returnValue({
        result: $q.defer().promise
    });
)
下一步是返回一个承诺,您可以在单元测试中解决它,以便在解决或拒绝它时验证正确的行为。您可以通过这种方式模拟模式窗口关闭

阅读更多关于美国间谍的信息


还要注意的是,您不必将模式服务注入控制器(我指的是
$modal:$modal.
行)。服务是单身人士。当你监视它的任何实例时,它会在任何地方监视它。

问题是,在每个之前的第二个
中,你试图监视
范围。modalInstance
,而该字段不存在。因此,茉莉花找不到监视的对象

另一个问题是,您使用了模态的
结果
承诺,因此您必须告诉您的mock返回它,以免得到TypeError

beforeEach(inject(function ($modal, $q) {
    spyOn($modal, 'open').and.returnValue({
        result: $q.defer().promise
    });
)
下一步是返回一个承诺,您可以在单元测试中解决它,以便在解决或拒绝它时验证正确的行为。您可以通过这种方式模拟模式窗口关闭

阅读更多关于美国间谍的信息


还要注意的是,您不必将模式服务注入控制器(我指的是
$modal:$modal.
行)。服务是单身人士。当你监视它的任何实例时,它会在任何地方监视它。

问题是,在每个
之前的第二个
中,你试图监视
范围。modalInstance
,而该字段不存在。因此,茉莉花找不到监视的对象

另一个问题是,您使用了模态的
结果
承诺,因此您必须告诉您的mock返回它,以免得到TypeError

beforeEach(inject(function ($modal, $q) {
    spyOn($modal, 'open').and.returnValue({
        result: $q.defer().promise
    });
)
下一步是返回一个承诺,您可以在单元测试中解决它,以便在解决或拒绝它时验证正确的行为。您可以通过这种方式模拟模式窗口关闭

阅读更多关于美国间谍的信息


还要注意的是,您不必将模式服务注入控制器(我指的是
$modal:$modal.
行)。服务是单身人士。当你监视它的任何实例时,它会在任何地方监视它。

问题是,在每个
之前的第二个
中,你试图监视
范围。modalInstance
,而该字段不存在。因此,茉莉花找不到监视的对象

另一个问题是,您使用了模态的
结果
承诺,因此您必须告诉您的mock返回它,以免得到TypeError

beforeEach(inject(function ($modal, $q) {
    spyOn($modal, 'open').and.returnValue({
        result: $q.defer().promise
    });
)
下一步是返回一个承诺,您可以在单元测试中解决它,以便在解决或拒绝它时验证正确的行为。您可以通过这种方式模拟模式窗口关闭

阅读更多关于美国间谍的信息


还要注意的是,您不必将模式服务注入控制器(我指的是
$modal:$modal.
行)。服务是单身人士。当你监视它的任何实例时,它会监视它的任何地方。

这是有意义的,除非现在我得到一个TypeError:“undefined”不是一个对象(评估“modalInstance.result”)。我在想我必须做一个假的模拟模态,但我似乎还不能让它完全起作用。我也有下面的代码来消除错误,我在正确的轨道上吗?mockModalInstance.result=函数(promiseHandler){return promiseHandler();};这是有道理的,但现在我得到一个TypeError:“undefined”不是一个对象(计算“modalInstance.result”)。我在想我必须做一个假的模拟模态,但我似乎还不能让它完全起作用。我也有下面的代码来消除错误,我在正确的轨道上吗?mockModalInstance.result=函数(promiseHandler){return promiseHandler();};这是有道理的,但现在我得到一个TypeError:“undefined”不是一个对象(计算“modalInstance.result”)。我在想我必须做一个假的模拟模态,但我似乎还不能让它完全起作用。我也有下面的代码来消除错误,我在正确的轨道上吗?mockModalInstance.result=函数(promiseHandler){return promiseHandler();};这是有道理的,但现在我得到一个TypeError:“undefined”不是一个对象(计算“modalInstance.result”)。我在想我必须做一个假的模拟模态,但我似乎还不能让它完全起作用。我也有下面的代码来消除错误,我在正确的轨道上吗?mockModalInstance.result=函数(promiseHandler){return promiseHandler();};