2016-09-07 6 views
1

ロケール依存の日付計算をmochaでテストしたいと思います。しかし、ロケールが異なるdescribe機能にリセットされていないようです:mochaの異なるロケールでmoment.jsをテストする方法

var expect = require('chai').expect, 
    moment = require('moment'); 

describe('English locale', function() { 
    moment.locale('en'); 
    it('uses Sunday as start of week', function() { 
     // Monday, 5th September 2016 
     var d = moment('2016-09-05').weekday(0); 
     expect(d.date()).to.equal(4); 
    }); 
}); 

describe('German locale', function() { 
    moment.locale('de'); 
    it('uses Monday as start of week', function() { 
     // Monday, 5th September 2016 
     var d = moment('2016-09-05').weekday(0); 
     expect(d.date()).to.equal(5); 
    }); 
}); 

どのように私は私のdescribeブロック内の特定の「ロケール」環境を作成することができますか?

documentationは、ロケール固有の方法でオブジェクトの書式を設定する方法のみを示します。特定のロケールのオブジェクトを作成します。

答えて

3

考えられる回避策は、個々の日付をローカライズすることです。明示的に生成された日付をローカライズすることにより)

describe('German locale', function() { 
    it('uses Monday as start of week', function() { 
     // Monday, 5th September 2016 
     var d = moment('2016-09-05', 'YYYY-MM-DD', 'de').weekday(0); 
     expect(d.date()).to.equal(5); 
    }); 
}); 

2(文字列から作成する場合にのみ動作します)異なっそれらを作成することにより、

1):これは2つの方法で行うことができます

describe('German locale', function() { 
    it('uses Monday as start of week', function() { 
     // Monday, 5th September 2016 
     var d = moment('2016-09-05').locale('de').weekday(0); 
     expect(d.date()).to.equal(5); 
    }); 
}); 

あなたはヘルパー関数を定義して、その関数で日付を構築するすべての呼び出しをmomentに置き換えることもできます。

function germanMoment() { 
    return moment.apply(moment, arguments).locale('de'); 
} 

describe('German locale', function() { 
    it('uses Monday as start of week', function() { 
     // Monday, 5th September 2016 
     var d = germanMoment('2016-09-05').weekday(0); 
     expect(d.date()).to.equal(5); 
    }); 
}); 
関連する問題