重构罗马数字Kata的Javascript规范

时间:2014-01-28 16:17:57

标签: javascript jasmine underscore.js roman-numerals

我是一名新手程序员,目前在Javascript中使用Roman Numeral Kata。我已经解决了所有规格(我正在使用Jasmine)正在传递。但是,我的规格中有很多重复。这里只是前两个:

describe("RomanNumeral", function () {

  it('returns I for 1', function () {
    expect(roman(1)).toEqual('I')
  })

  it('returns II for 2', function (){
    expect(roman(2)).toEqual('II')
  })

 })

在Ruby中,我可以通过这样做来解决问题:

describe Roman do 
[
  [1, 'I'],
  [2, 'II']

 ].each do | natural_number, roman_numeral |
    it "converts #{natural_number} to #{roman_numeral}" do 
      Roman.of(natural_number).should == roman_numeral
    end
  end
end

我将使用哈希而不是数组,但目标仍然是相同的。我想循环遍历该哈希,调用每个哈希,设置一个natural_number变量,设置一个roman_numeral变量,然后通过插入哈希中的参数来运行每个规范。

但是现在我所拥有的只是

describe("RomanNumeral", function () {

  var test_hash = {1, 'I'}

  var someFunction

  _.each(test_hash, someFunction{ 

  }) 

从我的Javascript规范中删除复制形式的最佳方法是什么?谢谢!

1 个答案:

答案 0 :(得分:0)

你应该像这样定义你的罗马数字对象

var numerals = {
    1:'I',
    2:'II'
};

然后你可以做

_.each(numerals, function(value, key) {
    it('returns '+value+' for '+key, function () {
        expect(roman(key)).toEqual(value);
    });
});