2017-10-15 9 views
0

함수의 반환 값의 데이터 구조를 더 큰 구조 (예 : 반환 된 구조가 더 완전한 해시에 대해 "유효성을 검사합니다")와 비교하려고합니다. toHaveProperty를 사용하는 작동 테스트가 있지만이 특정 문제에 대한 테스트에서 내 오브젝트 구조를 정의하지 않아도됩니다. 여기 반환 값을 해시의 하위 집합으로 일치시키는 jest test - 함수를 두 번 호출하지 않고?

// ** this would fail if a property value is different ** 
test('thing returns something matching the structure within types',() => { 
    expect(thing()).toBeDefined(
     expect(types).toMatchObject(thing()) 
    ); 
}); 

는 구조입니다 :

내가 정말 원하는 것은 더 큰 해시에 포함 된 두 번 함수를 호출하지의 거리를 찾을 수있다 나에게 테스트 구조 (그리고 값)을 드릴 것입니다 무언가이다 :

function thing() { 
    return {changeSheet: { 
     command: ["s", "sheet"], 
     options: [], 
     required: [], 
     sheet_option: false, 
    }}; 
} 

: 여기

var types = { 
    changeSheet:{ 
     command: ["s", "sheet"], 
     options: [], 
     required: [], 
     sheet_option: true, 
    }, 
    checkIn:{ 
     command: ["in", "i"], 
     options: ["-a", "--at"], 
     required: [], 
     sheet_option: false, 
    }, 
    checkOut:{ 
     command: ["out", "o"], 
     options: ["-a", "--at"], 
     required: [], 
     sheet_option: true, 
    } 
}; 

내가 테스트 꿔 함수의 Notice changeSheet.sheet_option은 반환 값과 'types'해시와 다릅니다. 내 구조를 검사하고 값을 무시하거나 또는 toHaveProperty()를 사용해야하는 조우 매칭 메커니즘이 있습니까?

답변

2

당신은 농담의 expect 일치 도구를 사용할 수 있습니다 말했다

expect(thing()).toMatchObject({ 
    changeSheet: { 
    command: expect.arrayContaining([ 
     expect.any(String), 
     expect.any(String) 
    ]), 
    options: expect.any(Array), 
    required: expect.any(Array), 
    sheet_option: expect.any(Boolean) 
    } 
}); 

http://facebook.github.io/jest/docs/en/expect.html#content이, 당신이 여기를 판정하는 것은 더 나은 타이프 라이터 또는 흐름과 같은 정적 형 검사기를 사용하여 수행 할 수있는 단순 구조/입력됩니다.

+0

좋아, 그건 나에게 가치있는 유형을 테스트하지 않았다고 지적했다. 나는 정말로 '타입'을 키 이름을위한 템플릿으로 사용하기를 원했다. 뒤늦은 견해로는 값 유형을 확인하지 않고 어리석은 일입니다. 나는 강하게 타자를 치는 언어의 배경에서 온다, 그렇습니다, 나는 자바 스크립트 세계에 조금을 여기에서 조정하고 있을지도 모르다. 고마워! –