2016-09-09 3 views
3

전달하는 데 사용이 체크 :Jasmine : 배열에 객체가 있는지 확인하는 방법은 무엇입니까?

expect(array).toContain(value) 

배열 :

[ 
    {"_t":"user","id":1073970419,"email":"[email protected]","name":"Spectator"}, 
    {"_t":"user","id":4464992042,"email":"[email protected]","name":"Collaborator"}, 
    {"_t":"user","id":1978569710,"email":"[email protected]","name":"Manage"} 
] 

값 : 더 이상

{"_t":"user","id":1978569710,"email":"[email protected]","name":"Manage"} 

그러나이 전달합니다. 같은 테스트를 작성하는 새로운 방법은 무엇입니까?

답변

4

개체를 포함하지 않습니다. 동일한 속성을 가진 두 개체가 같음 개체가 아니기 때문에 toContain은 절대로 통과하지 않습니다.

toEqual 또는 toEqualjasmine.objectContaining을 결합한 속성의 하위 집합 만 확인하려는 다른 테스트를 사용해야합니다.

여기에 해당 페이지의 재스민 문서에서 toEqual 예제 :

describe("The 'toEqual' matcher", function() { 

    it("works for simple literals and variables", function() { 
    var a = 12; 
    expect(a).toEqual(12); 
    }); 

    it("should work for objects", function() { 
    var foo = { 
     a: 12, 
     b: 34 
    }; 
    var bar = { 
     a: 12, 
     b: 34 
    }; 
    expect(foo).toEqual(bar); 
    }); 
}); 

참고 이제 foobar 같습니다. 여러 특성을 가진 개체가 jasmine.objectContaining에 공급되는 부분 객체를 일치하는 방법

describe("jasmine.objectContaining", function() { 
    var foo; 

    beforeEach(function() { 
    foo = { 
     a: 1, 
     b: 2, 
     bar: "baz" 
    }; 
    }); 

    it("matches objects with the expect key/value pairs", function() { 
    expect(foo).toEqual(jasmine.objectContaining({ 
     bar: "baz" 
    })); 
    expect(foo).not.toEqual(jasmine.objectContaining({ 
     c: 37 
    })); 
    }); 

    // ... 
}); 

참고 :

여기 jasmine.objectContaining를 사용하여 예입니다.

+0

감사합니다. 다른 독자를위한 사례는 어떻습니까? 테스트를 어떻게 다시 작성합니까? – hakunin

+0

@hakunin : 원한다면 꼭 모든 것을 추가하십시오. 제안 할 때 편집을 승인합니다. 방금 문제가 무엇인지 알았으므로 Jasmine 문서를 살펴 보았습니다 (* 와우 *는 matcher의 목록을 원할 때 좌절합니다). –

+0

@hakunin : 나는 그 문서의 한 쌍을 대답으로 복사했습니다. –

-1

는 T.J.Crowder @ 이미 정확하게 문제를 설명했다.

var userA = {"_t":"user","id":1978569710,"email":"[email protected]","name":"Manage"} 

array = 
[ 
    {"_t":"user","id":1073970419,"email":"[email protected]","name":"Spectator"}, 
    {"_t":"user","id":4464992042,"email":"[email protected]","name":"Collaborator"}, 
    userA 
] 

expect(array).toContain(userA); 
+0

헤이 페드로, 그건 제가 통과하지 못했고 정확히 제가 설명한 문제입니다. – hakunin

+0

그건 이상합니다. 여기를지나갑니다. 배열과 변수가 동일한 객체를 참조하기 때문에 약간 다릅니다. 그래서,이 경우, 포함해야합니다. –

+0

그런 의미에서 그렇습니다. 그러나 나는 그 문제를 해결하지 못하기 때문에 같은 대상을 가지고 있지 않습니다. – hakunin

2

당신이 필요로하는 구문은 다음과 같습니다 :

const obj = {"_t":"user","id":1978569710,"email":"[email protected]","name":"Manage"}; 
expect(array).toContain(jasmine.objectContaining(obj)); 

참조 바이올린 : https://jsfiddle.net/bblackwo/4o5u5Lmo/16/

그냥 당신이 당신의 예를 적용 할 경우,이 같은 뭔가가 필요 것, 조금 더 당신을 도울
+0

이것은 T.J.에 의해 이미 지적되었습니다. 받아 들인 대답에서. – hakunin

+0

@hakunin 받아 들인 대답은'toContain()'을'jasmine.objectContaining()'과 함께 사용하는 방법을 명시 적으로 보여주지 않았다. 내 대답은 명시 적으로 함께 사용하는 방법을 보여줍니다. – BBlackwo

+0

나는 이것을 작동 시키려고했으나하지 않았다. –

관련 문제