2016-11-30 1 views
0

전 모카와 차이가 처음입니다. 테스트에서 두 객체를 비교하는 함수를 만들었습니다.모카 차이 (mocha chai) 사용자 정의 비교 기능

function compareExtremelyCompexObject (testedObject, trueObject); 

어떻게 테스트를 주장하는 내 compareExtremelyCompexObject 함수를 사용하는 모카 차이 스펙을 작성합니까? 나는이 같은 것을 가지고

:

it('should create a specific complex object from boilerplate data', function(done) { 
    importDataFromSystem(). 
    .end(function(err, res){ 
      var dummyComplexObject = getBoilerplateComplexObject(); 
      compareExtremelyCompexObject(res, dummyComplexObject); 
      done(); 
     }); 
    }); 
}); 

지금은 복잡한 객체를 비교하는 방법 누락 때까지 찾은 예. "should"/ "expect"로 달성 될 수 있습니까?

이것이 명확하지 않은 경우 알려주십시오. 나는 정말로이 문제를 수 일간 연구 해왔다. 어떤 도움도 깊이 감사 할 것입니다!

+0

"외부 시스템에서 데이터를 가져 와서 조작하고 DB에 저장하는 importDataFromSystem이라는 함수를 테스트해야합니다." , 당신은이 모든 작업을 수행하는 간단한 함수가 없어야합니다. 문자 그대로 테스트 할 수 없으며, 최소한 3 개의 함수로 나누어야합니다. 1 데이터를 가져 와서 데이터를 조작하고 데이터를 저장하는 것으로 전달하십시오. 당신은 3 가지 기능 중 하나를 쉽게 테스트 할 수 있습니다. 당신이하려고하는 것은 아마도 할 수 있지만,해야 할 일보다 훨씬 더 많은 작업이 필요합니다. – rule

+0

@rule (가져 오기, 조작 및 저장) 각각의 작업에 대해 별도의 기능이 있습니다. 여전히 전체 프로세스 ("디렉터")를 테스트해야합니다. 내가하지 않니? 매크로 레벨 – Alon

+0

오케이에서 뭔가 잘못 될 수 있기 때문에, 나는 당신이 말 그대로 하나의 테스트에서 모든 것을 수행하는 단일 함수를 테스트하려고한다고 생각했습니다! 그럼 당신은 전체 과정을 테스트 할 수 있지만 얼마나 열심히 될지 모르겠다. 나는 그와 관련된 유용한 정보를 가지고 있지 않다. 미안하다. – rule

답변

0

간단히하기 위해 질문을 편집해야한다고 생각하지만 수집 한 내용에서 새로운 개체를 단언하고 싶습니다 === 사용자 지정 함수로 개체를 테스트 하시겠습니까? 이 경우에 compareExtremelyCompexObject이 true 또는 false를 반환한다고 가정하면 거의 다 왔을 것입니다. 귀하의 코멘트 당으로

it('should create a specific complex object from boilerplate data', function(done) { 
    importDataFromSystem() 
    .end(function(err, res){ 
      var dummyComplexObject = getBoilerplateComplexObject(); 
      // with assert 
      assert(compareExtremelyCompexObject(res, dummyComplexObject)); 
      // or with chai expect 
      expect(compareExtremelyCompexObject(res, dummyComplexObject)).to.be.true; 
      done(); 
     }); 
    }); 
}); 

, 당신은 importDataFromSystem이 묶여있는 방법, 그것은 스트림, 약속 또는 그 자체를 반환하는 것을 의미한다. 'end'에 콜백을 호출하는 스트림이 res이라고 생각하면 위의 예제가 제대로 작동 할 것입니다. 그러나 res이 사용자가 찾고자하는 것이 아닌 경우, 약속을 해결하고 해당 명령을 체인화하여 동기식 조작 순서를 보장해야 할 수도 있습니다. 예. 사용자가 만든 객체를를 얻을에

it('should create a specific complex object from boilerplate data', function(done) { 

    Promise.resolve() 
    .then(function(){ 
     return importDataFromSystem(); 
    }) 
    .then(function(){ 
     return assert(compareExtremelyCompexObject(getNewlyCreatedObject(), getBoilerplateComplexObject())); 
     // assert should throw error and be caught if the two objects are not equal 
    }) 
    .then(function(){ 
     done() 
    }) 
    .catch(function(err){ 
     done(err); 
    }); 

}); 

는 그러나 물론, 당신은 어떤 방법이 필요합니다. 그것은 완전히 다른 토론입니다. 사용자 정의 비교의 주장을 처리하기 위해 주제를 좁히기 위해 질문을 편집해야합니다.

관련 문제