2016-04-27 87 views
0

我對測試JavaScript有點新,我想知道什麼是測試產生唯一ID的東西的最佳方法。使用唯一ID進行Javascript測試

編輯:

我真的不希望測試我要確保動作返回正確的結果,當createQuestion函數被調用的ID。但是測試會失敗,因爲在函數中生成的ID不會匹配。

我目前的代碼如下所示。

//------- Action Creator --------// 
 

 
export const createQuestion = function (inputType) { 
 
    const hasOptions = /radio/g.test(inputType); 
 
    return { 
 
    type: types.CREATE_QUESTION, 
 
    question: { 
 
     id: uuid.v1(), 
 
     priority: null, 
 
     title: null, 
 
     tip: null, 
 
     required: false, 
 
     isSaved: false, 
 
     hasOptions: hasOptions, 
 
     input: { 
 
     type: inputType, 
 
     options: [] 
 
     } 
 
    } 
 
    }; 
 
}; 
 

 

 
//------- TESTS --------// 
 
test('Question Actions', nest => { 
 

 
    nest.test('Create Question', function (assert) { 
 
    const msg = 'Questions was Created'; 
 

 
    const question = { 
 
     id: 1, 
 
     priority: null, 
 
     title: null, 
 
     tip: null, 
 
     required: false, 
 
     isSaved: false, 
 
     hasOptions: false, 
 
     input: { 
 
     type: 'text', 
 
     options: [] 
 
     } 
 
    }; 
 

 
    const expectedAction = { 
 
     type: types.CREATE_QUESTION, 
 
     question 
 
    }; 
 

 

 
    const actualAction = actions.createQuestion('text'); 
 
    assert.deepEqual(actualAction, expectedAction, msg); 
 
    assert.end(); 
 
    });

由於唯一ID在Action創作者產生是不可能的,除非嘲笑我改變ID的功能與操作返回之後。

像這樣的東西

const changeUUID = obj => { 
    const newobj = {...obj}; 
    newobj.question.id = 1; 
    return newobj; 
}; 
+0

你想測試的id是什麼? – Hamms

+0

我真的不想測試ID,我想確保在調用createQuestion函數時該操作返回正確的結果。但是測試會失敗,因爲在函數中生成的ID不會匹配。 – Enjayy

回答

1

除非你有興趣的ID有一個特定的值,這是完全罰款從expectedAction排除。

assert.ok(actualAction.question.id); 

delete actualAction.question.id; 

assert.deepEqual(actualAction, expectedAction, msg); 
+0

我相信這會是'actualAction.question.id' – Hamms

+0

是的,我的錯。謝謝! –

+0

真棒,這是有效的,比我想的方式有點聰明。這些ID並不重要,它的其餘內容。我只是想確保我沒有對返回的數據進行任何不必要的操作。 – Enjayy