【问题标题】:unit test this.$onDestroy in angular>1.5 / es6在 angular>1.5 / es6 中对 this.$onDestroy 进行单元测试
【发布时间】:2017-08-11 20:08:21
【问题描述】:

使用 angular 1.5 / es6,我有以下要测试的代码:

    this.$onDestroy = function () {
        this.$interval.cancel(someIntervalTimer);
    };

我不知道如何在 jasmine 单元测试中触发控制器的破坏以测试那里发生的事情。 我尝试了 $destroy() $scope 和 $rootScope,还有 $broadcast('$destroy') 等,但这些似乎都没有触发破坏。

【问题讨论】:

    标签: angularjs unit-testing jasmine


    【解决方案1】:

    $onDestroy 钩子被指令/组件编译器以及其他控制器钩子调用。

    直接用$controller$componentController测试控制器时,应该手动调用hook方法:

    spyOn(controllerInstance.$interval, 'cancel');
    
    expect(controllerInstance.$onDestroy).toBe(jasmine.any(Function));
    
    controllerInstance.$onDestroy();
    
    expect(controllerInstance.$interval.cancel).toBeCalledWith(jasmine.any(Object));
    

    【讨论】:

    • 一个细节,但参数是 $interval 返回的承诺。
    • 没错,当然。如果可以直接提供而不是jasmine.any,那就更好了。
    猜你喜欢
    • 2017-01-09
    • 1970-01-01
    • 2016-10-07
    • 1970-01-01
    • 2021-10-07
    • 2019-11-02
    • 2016-04-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多