2015-07-16 2 views
0

Попытка запустить мой тест на жасмин для моего углового фильтра. Это то, что фильтр выглядит следующим образом:Как создать модуль для модульного тестирования?

(function() { 
    'use strict'; 
    var app = angular.module('mymodule'); 
     app.filter('customCurrency', function($filter) { 
     return function(amount, currencySymbol, fractionSize) { 
      var currency = $filter('currency'); 

      if (amount < 0) { 
      return currency(amount, currencySymbol).replace('(', '-').replace(')', ''); 
      } 
.. 

Так я определил его в MyModule и это то, что тестовый модуль выглядит следующим образом:

describe('custom currency Filter', function() { 
    var myUpperFilter, $filter; 

    beforeEach(function() { 
    module('mymodule'); 
    inject(function($injector) { 
     // Append Filter to the filter name 

     // Usign $filter Provider 
     $filter = $injector.get('$filter'); 
    }); 
    }); 

    it('if I have 2 zeros in decimals only display max of 2 zeros in decimals', function() { 
    // using $filter 
    expect($filter('customCurrency')(1.0011, '$', undefined)).toEqual('$1<span class="decimals">.00</span>'); 
    }); 

}) 

Однако получить эту ошибку при выполнении теста:

Error: [$injector:modulerr] Failed to instantiate module mymodule due to: 
Error: [$injector:nomod] Module 'mymodule' is not available! You either misspelled the module name or forgot to load it. If registering a module ensure that you specify the dependencies as the second argument. 

Обновление: Я на самом деле есть ситуация с основным модулем и зависимую:

var app = angular.module('plunker', ['ngRoute','mymodule']); 
var app2 = angular.module('mymodule'); 

измененная plunkr:

http://plnkr.co/edit/Rcu5gojIJG1GSZEhU4sZ?p=preview

ответ

0

Я думаю, вы пропустили массив зависимостей в вашем определении модуля. Должно быть:

var app = angular.module('mymodule', []) 

Я также вставляю модуль в отдельный блок forEach.

Попробуйте

DEMO

app.js

var app = angular.module('mymodule', []); 


app.filter('customCurrency', function($filter) { 

    return function(amount, currencySymbol, fractionSize) { 
     var currency = $filter('currency'); 

     if (amount < 0) { 
     return currency(amount, currencySymbol).replace('(', '-').replace(')', ''); 
     } 

     var rounded = round(amount, fractionSize), 
     currencyString = currency(rounded, currencySymbol, fractionSize), 
     amounts = currencyString.split("."), 

     integerPart = amounts[0], 
     fractionalPart = amounts[1] || false, 
     zerosFromRight = countZerosFromRight(fractionalPart); 


     if (fractionalPart && zerosFromRight > 2) { 

     var lastNonZero = indexLastNonZero(fractionalPart); 

     // only zeros in fractionalPart 
     if (lastNonZero > -1) { 
      return integerPart + 
      '<span class="decimals">.' + 
      fractionalPart.slice(0, lastNonZero + 1) + '</span>'; 
     } 

     return integerPart + '<span class="decimals">.00</span>'; 

     } 


     if (fractionalPart) { 
     return integerPart + '<span class="decimals">.' + fractionalPart + '</span>'; 
     } 

     return integerPart; 
     ///////////////////////////////////////////// 

     function round(str, decimals) { 
     var num = +str; 

     return num.toFixed(decimals); 
     } 

     function indexLastNonZero(str) { 
     var len = str.length; 

     while (len--) { 

      if (str[len] !== '0') { 
      return len; 
      } 
     } 

     return -1; 
     } 

     function countZerosFromRight(str) { 

     var len = str.length, 
      count = 0; 

     while (len--) { 

      if (str[len] === '0') { 
      count++; 
      continue; 
      } 

      break; 
     } 

     return count 
     } 

    }; 
    }); 

спецификации

describe('custom currency Filter', function() { 

    var $scope = null; 
    var ctrl = null; 

    //you need to indicate your module in a test 
    beforeEach(module('mymodule')); 

    beforeEach(function() { 
    inject(function($injector) { 
     $filter = $injector.get('$filter'); 
    }); 
    }); 

    it('if I have 2 zeros in decimals only display max of 2 zeros in decimals', function() { 
    // using $filter 
    expect($filter('customCurrency')(1.0011, '$', undefined)).toEqual('$1<span class="decimals">.00</span>'); 
    }); 


}); 
0

Спасибо за составление plun кр. Это помогло мне создать экземпляр теста. Тест не удался, но вы должны уметь работать отсюда:

describe('custom currency Filter', function() { 
    var myUpperFilter, $filter; 

    beforeEach(module('mymodule')); 

    beforeEach(inject(function($injector) { 
    // Append Filter to the filter name 

    // Usign $filter Provider 
    $filter = $injector.get('$filter'); 
    })); 

    it('if I have 2 zeros in decimals only display max of 2 zeros in decimals', function() { 
    // using $filter 
    expect($filter('customCurrency')(1.0011, '$', undefined)).toEqual('$1<span class="decimals">.00</span>'); 
    }); 
}); 

Надеюсь, это поможет.

Смежные вопросы