angularjs - 如何清理测试之间的 Angular 缓存

标签 angularjs jasmine

我在 angularjs 中工作,我的单元测试使用 Jasmine 和 mgMock。

我了解到,当我进行更改某个服务(如配置)的提供者对象的测试时,这些更改会转移到同一运行中的其他测试。这会在测试之间创建运行依赖性。

有谁知道我如何在每次测试后清除 Angular 提供程序和实例缓存?

最佳答案

问题出在我的代码中:

我的代码类似于下面的代码。由于 Angular 在测试运行之间保留模块定义(因为它不负责脚本加载,所以它应该如此),状态变量在测试之间共享。

(function(){
  angular.module('myModule',['ng']).provider(myServiceProvider);

  var status = 'init';

  function setStatus(newStatus) {
    status = newStatus;
  }

  function myServiceProvider() {
    function myServiceFactory() {
      return status;
    }

    return {
      $get: myServiceFactory,
      setStatus: setStatus
    };
  }
})();

解决方案是确保变量在提供程序创建范围内声明:

(function(){
  angular.module('myModule',['ng']).provider(myServiceProvider);

  function myServiceProvider() {
    var status = 'init';

    function setStatus(newStatus) {
      status = newStatus;
    }

    function myServiceFactory() {
      return status;
    }

    return {
      $get: myServiceFactory,
      setStatus: setStatus
    };
  }
})();

关于angularjs - 如何清理测试之间的 Angular 缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23130596/

相关文章:

javascript - jsPDF向表格添加错误的空格

java - 将 Angular js 与 taglib 结合使用

angular - 如何修复 Angular 测试中的 "ViewDestroyedError: Attempt to use a destroyed view"错误?

javascript - Protractor - 当元素不可见且不执行 "else"条件时测试失败

unit-testing - 使用 angular.js 加载用于 jasmine 测试的 json 文件

angularjs - 使用 $mdDialog.confirm() 关闭父页面

javascript - jquery 方法不是从 Angular 回调调用?

javascript - 使用 ng-repeat 和多个 ng-show 进行过滤性能

javascript - 使用 window.confirm 进行 Angular 指令 Controller 单元测试

javascript - 如何使用 ng-model-option debounce 测试输入?