我们在 angularjs 中使用 karma 和 mocha 进行单元测试。但是我们在测试我们的 $locale 东西时遇到了问题,比如日期格式。
我们有三个测试,是否为每个测试重新创建 $locale ?如果我在这些测试中使用服务,我的服务是否也会重置,或者测试 1 是否可能会影响测试 2,因为我的服务包含一些数据?
这是一个代码片段:
it 'should format currency in german', ->
inject (localizer, $filter) ->
localizer 'de'
expect($filter('currency') 5125, '€').to.be.equal '5.125,00 €'
expect($filter('currency') 5, '€').to.be.equal '5,00 €'
expect($filter('currency') .51, '€').to.be.equal '0,51 €'
expect($filter('currency') 0.515, '€').to.be.equal '0,52 €'
it 'should format date in german', ->
inject (localizer, $filter) ->
localizer 'de'
myDate = new Date 2015,5,22
expect($filter('date') myDate,'shortDate').to.be.equal '22.06.15'
app.service 'localizer', ($locale, locales) -> (currentLocale) ->
console.log("Seting currentLocale to:"+currentLocale+"| lastLocale:"+lastLocale)
if currentLocale isnt lastLocale
console.log("currentLocale is now:"+currentLocale)
lastLocale = currentLocale
localeData = locales[currentLocale]
angular.extend $locale.DATETIME_FORMATS, localeData.DATETIME_FORMATS
angular.extend $locale.NUMBER_FORMATS, localeData.NUMBER_FORMATS
问题是,如果在使用 'de' 的测试之后再次在 $locale 中使用 'de' 的测试是英文格式值。如果我在第二个定位器“de”之前放置一个定位器“tr”,它就可以工作。为什么 $locae 的值会发生变化?是否可以 A) 防止 $locale 更改或 B) 在每次测试之前重置我的服务。