angularjs - Angular - Material - 测试 - $mdSidenav

标签 angularjs testing jasmine angularjs-material

我第一次在 Stack 上写问题 ;) 我在测试 $mdSidenav( Angular Material 组件。请参阅 https://material.angularjs.org/)时遇到问题。 在我的 Controller 中,我有类似的东西:

$scope.toggleRight = function() {
    $mdSidenav('right').toggle();
};

我想测试一下。所以在我的测试文件中,我首先创建了这个对象的模拟:

var $mdSidenav = function(test){
        return {
            toggle: function(){
                return true;
            }
        };
    };

    beforeEach(inject(function ($controller) {
        $scope = $rootScope.$new();
        createController = function () {
            return $controller('headerCtrl', {
                '$scope': $scope,
                '$mdSidenav': $mdSidenav
            });
        };
    }));

然后我尝试测试它:

describe('toggleRight method', function(){
        beforeEach(function(){
            spyOn($mdSidenav('right'), 'toggle').and.callThrough();
        });

        it('Should toggleRight open/close', function(){
            $scope.toggleRight();
            expect($mdSidenav('right').toggle).toHaveBeenCalled();
        });

    });

但是业力给我这个错误:

Error: Expected a spy, but got Function.

我希望有人能帮助我;)

最佳答案

您可以尝试不同的方法,使用 $provide 和匿名模块来注入(inject)模拟。

我在这里使用的是 sinon,但您可以更改为适当的 Jasmine 代码:

var spy = sinon.spy();

beforeEach(module(function ($provide) {
  $provide.value('$mdSidenav', function (v) {
    return {
      toggle: spy
    }
  });
}));

然后在测试中:

sinon.assert.calledOnce(spy);

关于angularjs - Angular - Material - 测试 - $mdSidenav,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29476696/

相关文章:

angularjs - 如何测试父元素对组件绑定(bind)的更改?

unit-testing - 使用RequireJS(和Jasmine/Sinon)时如何 stub 在另一个 View 渲染方法中实例化的主干 View

javascript - 无法在 angularJs 中从单击事件的选择中设置第二个下拉列表的选定值

javascript - Angular 不为某些浏览器加载图像和内容

testing - 在 wxPython 应用程序的自动化测试中处理模态对话框

ruby-on-rails - Michael Hartl 教程第 10 章中的 "undefined local variable or method ` 用户 '"

unit-testing - 模拟 ngrx/store

javascript - 无法在 AngularJS 中预填充表单

angularjs - 如何在 AngularJS 中生成即时指令?

c++ - 添加额外的 const 资格可以破坏功能(假设编译正常)?