【问题标题】:Unit test onComplete callback for $mdDialog$mdDialog 的单元测试 onComplete 回调
【发布时间】:2016-02-18 15:17:20
【问题描述】:

我有一个包含以下方法的 Angular 服务:

function showDialog() {
    $mdDialog.show({
        controller: 'SampleCtrl',
        controllerAs: 'vm',
        bindToController: true,
        templateUrl: 'template.html',
        onComplete: function () {
            service.doSomething();
        }
    });
}

如何测试 $mdDialog 的 onComplete 回调?我已经设法测试是否调用了 $mdDialog.show 但我无法让测试回调工作。

【问题讨论】:

    标签: angularjs angular-material mddialog


    【解决方案1】:

    $mdDialog.show() 在单元测试期间不会自行解析。要模拟该行为,您需要在测试中覆盖 show 方法并自己调用 onComplete 函数。一个简单的示例如下所示:

    $mdDialog.show = function (options) {
      options.onComplete();
    };
    
    // Call your function
    showDialog();
    

    但是,这忽略了$mdDialog.show() 通常返回的承诺。支持承诺链的更完整的覆盖,即$mdDialog.show().then(),需要返回一个虚拟承诺并手动解决它:

    // Create a dummy promise we can resolve manually
    var deferred = $q.defer(); 
    
    $mdDialog.show = function (options) {
      options.onComplete();
    
      // Return the dummy promise
      return deferred.promise;
    };
    
    // Call your function
    showDialog();
    
    // Resolve the promise, which won't actually be resolved until apply is called
    deferred.resolve();
    $rootScope.$apply();
    

    【讨论】:

      猜你喜欢
      • 2017-08-11
      • 2019-12-22
      • 2017-05-09
      • 2017-03-19
      • 1970-01-01
      • 1970-01-01
      • 2018-01-11
      • 2018-01-20
      • 2017-12-22
      相关资源
      最近更新 更多