2014-07-10 6 views
2

nodeunit으로 일부 자바 스크립트 개체에서 테스트를 실행하고 있습니다. 나는이 같은 약 모양을 확인하는거야오브젝트의 노드 단위 deepEqual 테스트에서 신기원 필드를 건너 뛸 수 있습니까?

test.deepEqual(originalObject, testObject, 'Sentiment validation'); 

개체 : 어떤 시점에서, 나는과 같이가는 검증이 내 테스트는 항상 실패

var originalObject = { 
    "sentiments": [ 
    { 
     "sentiment": "negative", 
     "user": { 
     "_id": null, 
     "type": "machine" 
     }, 
     "timestamp": 1404775102 
    } 
    ] 
}; 

var testObject = { 
    "sentiments": [ 
    { 
     "sentiment": "negative", 
     "user": { 
     "_id": null, 
     "type": "machine" 
     }, 
     "timestamp": 1405004493 
    } 
    ] 
}; 

을하기 때문에 동적에서 timestamp 필드 생성 된 객체 (이 경우 testObject)는 항상 다릅니다. 해당 필드를 건너 뛸 deepEqual 메서드를 알려주는 방법이 있습니까?

+0

문제점의 적절한 해결책을 모르지만 기능이 없으므로 해당 기능이 오브젝트를 수정하고 해당 오브젝트에 대해 어설트하도록하십시오. – Mritunjay

+0

이 옵션을 원한다면 시도해 볼 수 있습니다. – Mritunjay

답변

1

시도해 볼 수 있습니다.

원래 두 객체에 어서션을 호출하지 않았지만 원래 객체를 수정하고 수정 된 두 객체에 어설 션하는 함수를 호출했습니다. 원래 객체를 수정하고 주장을 호출 타임 스탬프

var getObjectWithoutTimestamp = function(obj){ 
    var result = {}; 
    //map is because if there are more than one sentiment in array. 
    result["sentiments"] = obj.sentiments.map(function(sentiment){ 
     var sntmnt = {}; 
     var user = {"_id":sentiment.user._id,"type":sentiment.user.type}; 
     sntmnt["sentiment"] = sentiment.sentiment; 
     sntmnt["user"] = user; 
     return sntmnt; 
    }); 
    return result; 
}; 

기능을 제거합니다

기능.

var assertObjects = function (expected,actual) { 
    //// get object excluding timestamp 
    var expectedModified = getObjectWithoutTimestamp(expected); 
    var actualModified = getObjectWithoutTimestamp(actual); 
    // assert on these two objects. I tried with nodejs assert. 
    require('assert').deepEqual(expectedModified,actualModified); 
} 

원래 개체에 assertObject 함수를 호출하십시오.

assertObjects(testObject,originalObject); 

더 좋은 방법이있을 수 있습니다. 그래서 어떤 개선/도움을 주시면 감사하겠습니다.

+0

답변 해 주셔서 감사합니다. 네, 저는 이미 여러분의 제안과 비슷한 것을했습니다. JSON 구조와 실제 값의 유효성을 검증하는 함수를 작성하여 true 또는 false를 반환하고 결과에 표준 test.equal()을 수행했습니다. –

+0

@ ÓscarPalacios ok는이 질문을 공개하도록합니다. 더 나은 대답을 해 주시겠습니까? – Mritunjay