2014-11-05 42 views
0

我想建立一個小的自定義記錄器,我注意到我的數組推動,我得到額外的括號,並不知道發生了什麼。下面是示例輸出使用數組推動獲得額外的括號

{ 
"GuestCheckout": [ 
    { 
     "log": "Product Id: 78-1212121", 
     "screenshot": "" 
    }, 
    [ 
     { 
      "log": "Product Color: undefined Product Size: 6 Lb Qty: 2", 
      "screenshot": "" 
     } 
    ], 
    [ 
     { 
      "log": "", 
      "screenshot": "results/screenshots/Guest Checkout - Failed.jpg" 
     } 
    ] 
] 
} 

這裏是具有記錄功能

var logs = {}, 
curLogs = []; 

module.exports = { 
    logger: function(log, screenshot) { 
     isScreenshot = screenshot || "false"; 
     curTestName = testName.replace(/ /g,''); 
     curLogs = []; 

     if (isScreenshot == "true") { 
     curLogs.push({ 
      "log": "", 
      "screenshot": log 
     }); 
     } else { 
     curLogs.push({ 
      "log": log, 
      "screenshot": "" 
     }); 
     } 

     if (curTestName in logs) { 
     logs[curTestName].push(curLogs); 
     } else { 
     logs[curTestName] = curLogs; 
     } 

     console.log(curLogs); 
    } 
} 

您將與第一個日誌和截圖注意它的周圍{}包裹,但與包裹第二實例類[]。這個記錄器功能被多次調用。我認爲這與推動建設這種方式有關,但我可能是錯的。由於

UPDATE:有了一個解決方案輸出看起來現在這個樣子

{ 
    "GuestCheckout": [ 
    [ 
     { 
      "log": "Product Id: 36-5173230", 
      "screenshot": "" 
     } 
    ], 
    [ 
     { 
      "log": "Product Color: undefined Product Size: 6 Lb Qty: 2", 
      "screenshot": "" 
     } 
    ], 
    [ 
     { 
      "log": "", 
      "screenshot": "results/screenshots/Guest Checkout - Failed.jpg" 
     } 
    ] 
    ] 
} 

現在的問題是所有{日誌,截圖}被包裹在括號內。

+0

您可以顯示來電記錄功能的代碼?傳遞給它的數據的來源和類型是什麼? – bloodyKnuckles 2014-11-05 21:55:51

+0

common.logger(「Product Id:」+ product.id); – jrock2004 2014-11-05 21:57:12

回答

2

當您將某些內容記錄到已存在的測試中時,就會出現該問題。如果日誌已經存在,那麼就是推送一個數組而不是一個對象。要解決這個問題,你有兩個選擇。爲測試拉動現有陣列並直接推送它,或者,將每個新日誌條目推後。

var logs = {}, 
curLogs = []; 

module.exports = { 
    logger: function(log, screenshot) { 
     isScreenshot = screenshot || "false"; 
     curTestName = testName.replace(/ /g,''); 
     if (!logs[curTestName]) { 
     // initialize logs entry 
     logs[curTestName] = []; 
     } 
     // get logs entry 
     curLogs = logs[curTestName]; 

     if (isScreenshot == "true") { 
     curLogs.push({ 
      "log": "", 
      "screenshot": log 
     }); 
     } else { 
     curLogs.push({ 
      "log": log, 
      "screenshot": "" 
     }); 
     } 
     console.log(curLogs); 
    } 
} 

var logs = {}, 
curLogs = []; 

module.exports = { 
    logger: function(log, screenshot) { 
     isScreenshot = screenshot || "false"; 
     curTestName = testName.replace(/ /g,''); 
     curLogs = []; 

     if (isScreenshot == "true") { 
     curLogs.push({ 
      "log": "", 
      "screenshot": log 
     }); 
     } else { 
     curLogs.push({ 
      "log": log, 
      "screenshot": "" 
     }); 
     } 

     if (curTestName in logs) { 
     Array.push.apply(logs[curTestName], curLogs); 
     } else { 
     logs[curTestName] = curLogs; 
     } 

     console.log(curLogs); 
    } 
} 
+0

此解決方案的問題是現在將其括號添加到它們的全部。我不想要那些括號 – jrock2004 2014-11-05 22:18:06

+0

它不應該。你應該有'{testName:[{log:「log」,screenshot:「」},{log:「log」,screenshot:「」},{log:「log」,screenshot:「」}]}'showing三個日誌測試'testName' – 2014-11-05 22:23:37

+0

我跟着第一個選項,它工作得很好。謝謝 – jrock2004 2014-11-05 22:30:47

1

您將carlog定義爲數組。在第一步中,您將對象推送到數組。這就是爲什麼沒有[]。在第二和第三步中,您將數組推送到carlog。這就是爲什麼有[]。

+0

爲了糾正它,您需要將'curLogs'合併到'logs [curTestName]'而不是推送。 'Array.push.apply(logs [curTestName],curLogs);' – 2014-11-05 21:54:17

+0

Kevin這樣做會改變什麼? – jrock2004 2014-11-05 21:56:18

+0

結果與'logs [curTestName] .push({log:「」,etc})''代替'curLogs.push({log:「」等等)''相同' – 2014-11-05 21:57:14