Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularJS+;Jasmine单元测试:如何使angular.forEach()中的angular.constant可见?_Javascript_Angularjs_Unit Testing_Jasmine_Karma Jasmine - Fatal编程技术网

Javascript AngularJS+;Jasmine单元测试:如何使angular.forEach()中的angular.constant可见?

Javascript AngularJS+;Jasmine单元测试:如何使angular.forEach()中的angular.constant可见?,javascript,angularjs,unit-testing,jasmine,karma-jasmine,Javascript,Angularjs,Unit Testing,Jasmine,Karma Jasmine,如何使angular.forEach()中的angular.constant可见 在下面的示例中,angular.constant可在父块和子块中访问。我试图通过使用散列和循环运行测试来优化代码,因此开始使用angularjs.forEach()。但是,在angular.forEach()中,angular.constant似乎不可见。知道为什么angular.forEach()中的常量不可访问(而服务不可访问)吗 注意:调用服务函数(如下面的compareSize())工作正常 describ

如何使angular.forEach()中的angular.constant可见

在下面的示例中,angular.constant可在父块和子块中访问。我试图通过使用散列和循环运行测试来优化代码,因此开始使用angularjs.forEach()。但是,在angular.forEach()中,angular.constant似乎不可见。知道为什么angular.forEach()中的常量不可访问(而服务不可访问)吗

注意:调用服务函数(如下面的compareSize())工作正常

describe('compareSize()', function() {
    test_api_name = 'compareSize()';
    tests = {
      'size1 is greater than size2': {
        'INPUTS': {
          'SIZE1_UNIT': '2 TB',
          'SIZE2_UNIT': '2048 KB'
        },
        'EXPECTED': {
          'RETURN': 1
        }
      },

      'float size1 is greater than int size2': {
        'INPUTS': {
          'SIZE1_UNIT': '1.50 TB',
          'SIZE2_UNIT': '1 TB'
        },
        'EXPECTED': {
          'RETURN': 1
        }
      }
    }

    angular.forEach(tests, function(t_hash, t_name){
      var size1_unit = t_hash.INPUTS.SIZE1_UNIT;
      var size2_unit = t_hash.INPUTS.SIZE2_UNIT;
      var exp_ret = t_hash.EXPECTED.RETURN;

      it(t_name, function(){
          console.log("TC: " + test_api_name + " " + t_name );
          var ret = utilsService.compareSize(size1_unit, size2_unit);
          expect(ret).toEqual(exp_ret);
      })
    });
我认为您的问题(问题1)是beforeach()在eachit()之前调用, 因此,当您定义“测试”时,您将“退出”it()并且KiB/Gib是未定义的。
(您可以使用console.log验证调用顺序)
您可以通过将测试的实例化放在beforeach()中来解决这个问题
并将forEach循环放入it()中。
例如:

    var KiB;
    var GiB;
    var tests;   

    beforeEach(function(inject(_KiB_, _GiB_) ){

console.log("set Kib and Gib");
        KiB = _KiB_;
        GiB = _GiB_;

console.log("define tests");
        tests = tests || {
          'KiB value': {
            'INPUTS': {
              'CONSTANT': KiB
            },
            'EXPECTED': {
              'VALUE': 1024
            }
          },
          'GiB value': {
            'INPUTS': {
              'CONSTANT': GiB
            },
            'EXPECTED': {
              'VALUE': 1024 * 1024
            }
          }
        }              
    });
但是我想建议你一种不同的方法来测试你的常数:

  describe("Constant values:", function(){        

       it("KiB value should be 1024", function(){
           expect(KiB).toEqual(1024);           
       });

       it("GiB value should be 1024*1024", function(){
           expect(GiB).toEqual(1024*1024);           
       });

    });
。。或者更准时:

describe("Constant: KiB", function(){
    var KiB;
    beforeEach(inject(function(_KiB_){
        KiB = _KiB_;
    }));
    it("its value should be 1024", function(){
        expect(KiB).toEqual(1024);
    });        
});  

describe("Constant: GiB", function(){
    var GiB;
    beforeEach(inject(function(_GiB_){
        GiB = _GiB_;
    }));
    it("its value should be 1024*1024", function(){
        expect(GiB).toEqual(1024*1024);
    });        
}); 
老实说,我认为这些测试是正确的,但无论如何,如果/当“问题1”(it()中KiB/GiB的定义)得到解决,这就是我的工作方式:

describe("Constants are well defined", function(){
       [
           { name: "KiB value should be 1024", value: KiB, expectedValue: 1024 }, 
           { name: "GiB value should be 1024*1024", value: GiB, expectedValue: 1024*1024 }
       ]
       .forEach(function(test){
           it(test.name, function(){
               expect(test.value).toEqual(test.expectedValue);                
           })
       });  
   });
亚历山德罗

describe("Constants are well defined", function(){
       [
           { name: "KiB value should be 1024", value: KiB, expectedValue: 1024 }, 
           { name: "GiB value should be 1024*1024", value: GiB, expectedValue: 1024*1024 }
       ]
       .forEach(function(test){
           it(test.name, function(){
               expect(test.value).toEqual(test.expectedValue);                
           })
       });  
   });