是否可以在测试中覆盖模块配置函数的常量?

 湛江耳鼻喉医院196_991 发布于 2023-02-04 15:52

我花了很长时间来试图覆盖提供给模块配置函数的注入常量.我的代码看起来像

common.constant('I18n', );
common.config(['I18n', function(I18n) {
  console.log("common I18n " + I18n)
}]);

我们通常的方法是保证I18n在我们的单元测试中被注入了

module(function($provide) {
  $provide.constant('I18n', );
});

这适用于我的控制器,但似乎配置功能不会查看$provide模块外部的内容.它不是获取模拟值,而是将早期值定义为模块的一部分.(在我们的测试中未定义;在下面的plunker中,'foo'.)

下面是一个工作的plunker(看看控制台); 有谁知道我做错了什么?

http://plnkr.co/edit/utCuGmdRnFRUBKGqk2sD

2 个回答
  • 我认为根本问题是您在配置块之前定义常量,因此每次加载模块时,将覆盖可能存在的任何模拟值.我的建议是将常量和配置分离成单独的模块.

    2023-02-04 15:55 回答
  • 首先:茉莉花似乎在你的傻瓜中不能正常工作.但我不太确定 - 也许其他人可以再次检查这个.不过我已经创建了一个新的plunkr(http://plnkr.co/edit/MkUjSLIyWbj5A2Vy6h61?p=preview)并按照这些说明操作:https://github.com/searls/jasmine-all.

    您将看到您的beforeEach代码永远不会运行.你可以检查一下:

    module(function($provide) {
      console.log('you will never see this');
      $provide.constant('I18n', { FOO: "bar"});
    });
    

    你需要两件事:

      功能中的真正测试it- expect(true).toBe(true)足够好

      您必须inject在测试中的某处使用,否则module将不会调用提供给的函数,并且不会设置常量.

    如果您运行此代码,您将看到"绿色":

    var common = angular.module('common', []);
    
    common.constant('I18n', 'foo');
    common.config(['I18n', function(I18n) {
      console.log("common I18n " + I18n)
    }]);
    
    var app = angular.module('plunker', ['common']);
    app.config(['I18n', function(I18n) {
      console.log("plunker I18n " + I18n)
    }]);
    
    describe('tests', function() {
    
      beforeEach(module('common'));
      beforeEach(function() {
        module(function($provide) {
          console.log('change to bar');
          $provide.constant('I18n', 'bar');
        });
      });
      beforeEach(module('plunker'));    
    
      it('anything looks great', inject(function($injector) {
          var i18n = $injector.get('I18n');
          expect(i18n).toBe('bar');
      }));
    });
    

    我希望它会像你期望的那样工作!

    2023-02-04 15:55 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有