2017-09-04 167 views
0

我创建了一个功能,在这里与断言测试:摩卡测试不及格

function renderInventory(arr) { 
    var str = ''; 
    for(var i = 0; i < arr.length; i++){ 
    for(var j = 0; j < arr[i].shoes.length; j++){ 
     str += arr[i].name + ', ' + arr[i].shoes[j].name + ', ' + arr[i].shoes[j].price + '\n'; 
    } 
    } 
    return str; 

} 

var currentInventory = [{ 
    name: 'Brunello Cucinelli', 
    shoes: [{ 
     name: 'tasselled black low-top lace-up', 
     price: 1000 
    }, { 
     name: 'tasselled green low-top lace-up', 
     price: 1100 
    }, { 
     name: 'plain beige suede moccasin', 
     price: 950 
    }, { 
     name: 'plain olive suede moccasin', 
     price: 1050 
    }] 
}, { 
    name: 'Gucci', 
    shoes: [{ 
     name: 'red leather laced sneakers', 
     price: 800 
    }, { 
     name: 'black leather laced sneakers', 
     price: 900 
    }] 
}]; 


var actual = renderInventory(currentInventory); 
var expected = "Brunello Cucinelli, tasselled black low-top lace-up, 1000" + '\n' + 
"Brunello Cucinelli, tasselled green low-top lace-up, 1100" + '\n' + 
"Brunello Cucinelli, plain beige suede moccasin, 950" + '\n' + 
"Brunello Cucinelli, plain olive suede moccasin, 1050" + '\n' + 
"Gucci, red leather laced sneakers, 800" + '\n' + 
"Gucci, black leather laced sneakers, 900"; 

function assertrenderInventory(actual, expected, testName){ 
    if(actual === expected){ 
    console.log('passed'); 
    }else{ 
    console.log('FAILED [' + testName + '] Expected "' + actual + '" to be "' + expected + '"'); 
    } 
} 

assertrenderInventory(actual, expected, 'testing renderInventory'); 

基本上这是什么一样的是,它得到designer nameshoe name它通过数组迭代的price所有在一行。但由于某种原因,无论我如何尝试做测试,它仍然失败,并且摩卡测试存在“分裂”错误。

这里的摩卡测试:

describe('render inventory', function() { 
    it('renders_first_line_correctly', function() { 
    var inventory = [ 
     { 
     name: 'Brunello Cucinelli', 
     shoes: [ 
      {name: 'tasselled black low-top lace-up', price: 1000}, 
      {name: 'tasselled green low-top lace-up', price: 1100}, 
      {name: 'plain beige suede moccasin', price: 950}, 
      {name: 'plain olive suede moccasin', price: 1050} 
     ] 
     }, 
     { 
     name: 'Gucci', 
     shoes: [ 
      {name: 'red leather laced sneakers', price: 800}, 
      {name: 'black leather laced sneakers', price: 900} 
     ] 
     } 
    ]; 

    var actual = renderInventory(inventory).split('\n'); 
    var expected = 'Brunello Cucinelli, tasselled black low-top lace-up, 1000'; 
    expect(actual[0]).toBe(expected); 
    }); 

    it('renders_second_line_correctly', function() { 
    var inventory = [ 
     { 
     name: 'Brunello Cucinelli', 
     shoes: [ 
      {name: 'tasselled black low-top lace-up', price: 1000}, 
      {name: 'tasselled green low-top lace-up', price: 1100}, 
      {name: 'plain beige suede moccasin', price: 950}, 
      {name: 'plain olive suede moccasin', price: 1050} 
     ] 
     }, 
     { 
     name: 'Gucci', 
     shoes: [ 
      {name: 'red leather laced sneakers', price: 800}, 
      {name: 'black leather laced sneakers', price: 900} 
     ] 
     } 
    ]; 

    var actual = renderInventory(inventory).split('\n'); 
    var expected = 'Gucci, black leather laced sneakers, 900'; 
    expect(actual.pop()).toBe(expected); 
    }); 
}); 

任何想法,我应该怎么做才能在这里通过测试?

你可以在这里查看我的代码:https://jsbin.com/zeviponeda/edit?html,js,console

回答

0

找你renderInventory追加“\ n”到最后也行,但你的预期不以“\ n”结束;实际的预期应该是

var expected = "Brunello Cucinelli, tasselled black low-top lace-up, 
1000" + '\n' + 
"Brunello Cucinelli, tasselled green low-top lace-up, 1100" + '\n' + 
"Brunello Cucinelli, plain beige suede moccasin, 950" + '\n' + 
"Brunello Cucinelli, plain olive suede moccasin, 1050" + '\n' + 
"Gucci, red leather laced sneakers, 800" + '\n' + 
"Gucci, black leather laced sneakers, 900" + '\n'; 

出于同样的原因actual.pop()导致空字符串