Jasmine JavaScript 테스트 - 목표와 목표의 비교
예를 들어 다음과 같습니다.
var myNumber = 5;
expect(myNumber).toBe(5);
expect(myNumber).toEqual(5);
을 사용하다toBe()
★★★★★★★★★★★★★★★★★」toEqual()
자를를 평? ??만약 그렇다면, 한쪽만 사용하고 다른 한쪽은 사용하지 않는 것이 좋을까요?
들어 등, ),(: ),, ),, ),)는 차이가 없습니다.toBe
★★★★★★★★★★★★★★★★★」toEqual
5
,true
, 「」"the cake is a lie"
.
을 toBe
★★★★★★★★★★★★★★★★★」toEqual
세 가지 사물을 상상해 봅시다.
var a = { bar: 'baz' },
b = { foo: a },
c = { foo: a };
한 비교 「 」 「 」 「 」 )를 사용합니다.===
는 것을 말합니다.
> b.foo.bar === c.foo.bar
true
> b.foo.bar === a.bar
true
> c.foo === b.foo
true
그러나 "동일하다"고 해도 메모리 내의 다른 위치에 존재하는 객체를 나타내기 때문에 "같지 않다"는 것도 있습니다.
> b === c
false
★★★★★★★★★★★★★★」toBe
는 않는다.
expect(c.foo).toBe(b.foo)
와 같은 것이다.
expect(c.foo === b.foo).toBe(true)
내 말을 믿지 말고 소스코드를 참조해 주세요.
★★★★★★★★★★★★★★★★★.b
★★★★★★★★★★★★★★★★★」c
사물을 ; 둘다 닮다; 닮다; 닮다.
{ foo: { bar: 'baz' } }
b
★★★★★★★★★★★★★★★★★」c
같은 대상을 나타내지 않더라도 "진짜"일까요?
「」라고 입력합니다.toEqual
이는 "deep equality"(즉, 키 값이 동일한지 여부를 확인하기 위해 객체를 재귀적으로 검색함)를 검사합니다.을 하다
expect(b).not.toBe(c);
expect(b).toEqual(c);
그게 좀 더 명확해졌으면 좋겠어요.
toBe()
vs 대 toEqual()
toEqual()
동등성을 확인합니다. toBe()
편,,,동동동동동동동지지지확확확확다
toBe()
시 및 "" " " " " " " "toEqual()
개체를 비교할 때 사용합니다.
할 때, 원형을 할 때,toEqual()
★★★★★★★★★★★★★★★★★」toBe()
을 사용하다때, 「」를 참조해 주세요.toBe()
을 하다메모리 내의 동일한 객체가 아닌 경우 false가 반환됩니다.내의 않은 를 합니다.toEqual()
오브젝트 비교용.
자세한 것은, http://evanhahn.com/how-do-i-jasmine/ 를 참조해 주세요.
, 그럼 이제 제제rencerence의 를 toBe()
★★★★★★★★★★★★★★★★★」toEqual()
숫자에 관한 한, 당신의 비교가 정확하다면 어떤 차이도 없을 것이다. 5
항상 와 동등하다5
.
다른 결과를 보기 위해 이 제품을 가지고 놀기 좋은 장소가 여기에 있습니다.
갱신하다
방법toBe()
★★★★★★★★★★★★★★★★★」toEqual()
JavaScript에서 정확히 무엇을 하는지 이해하는 것입니다.Jasmine API에 따르면 다음 위치에 있습니다.
toEqual()은 단순한 리터럴 및 변수에 대해 동작하며 오브젝트에 대해서도 동작합니다.
toBe()와 비교
===
요컨대 그게 의미하는 것은toEqual()
그리고.toBe()
유사한 Javascript입니다.===
를 제외한 연산자toBe()
또한 다음 예시와 동일한 오브젝트인지 확인합니다.objectOne === objectTwo //returns false
뿐만 아니라.하지만,toEqual()
그 상황에서는 진실이 될 것이다.
이 경우, 적어도 다음과 같은 이유를 이해할 수 있습니다.
var objectOne = {
propertyOne: str,
propertyTwo: num
}
var objectTwo = {
propertyOne: str,
propertyTwo: num
}
expect(objectOne).toBe(objectTwo); //returns false
그것은 다른, 그러나 유사한 질문에 대한 이 답변에서 언급된 바와 같이,===
operator는 실제로 두 오퍼랜드가 동일한 객체를 참조하고 있거나 값 유형의 경우 동일한 값을 갖는다는 것을 의미합니다.
재스민 기트허브 프로젝트를 인용하자면
expect(x).toEqual(y);
또는 와y 를 한 경우 합니다.
expect(x).toBe(y);
오브젝트 또는 프리미티브x 와 y 를 비교하여 같은 오브젝트일 경우 통과합니다.
Jasmine 소스 코드를 보면 이 문제를 더 잘 알 수 있습니다.
toBe
연산자, identity/ 등식 연산자, identity/discal 등식 연산자, identity/discal 등식 연산자, identity/discal 등식 만을 사용합니다.===
:
function(actual, expected) {
return {
pass: actual === expected
};
}
toEqual
로, 150줄이다, 150줄이다, 라고 에 대한 String
,Number
,Boolean
,Date
,Error
,Element
★★★★★★★★★★★★★★★★★」RegExp
다른 오브젝트의 경우 속성을 재귀적으로 비교합니다.
연산자, 즉 등가 연산자의 다릅니다.==
§:
var simpleObject = {foo: 'bar'};
expect(simpleObject).toEqual({foo: 'bar'}); //true
simpleObject == {foo: 'bar'}; //false
var castableObject = {toString: function(){return 'bar'}};
expect(castableObject).toEqual('bar'); //false
castableObject == 'bar'; //true
toEqual()
전치사물 toBe()
을 사용하다
다음 코드/스위트는 자체 설명이 필요합니다.
describe('Understanding toBe vs toEqual', () => {
let obj1, obj2, obj3;
beforeEach(() => {
obj1 = {
a: 1,
b: 'some string',
c: true
};
obj2 = {
a: 1,
b: 'some string',
c: true
};
obj3 = obj1;
});
afterEach(() => {
obj1 = null;
obj2 = null;
obj3 = null;
});
it('Obj1 === Obj2', () => {
expect(obj1).toEqual(obj2);
});
it('Obj1 === Obj3', () => {
expect(obj1).toEqual(obj3);
});
it('Obj1 !=> Obj2', () => {
expect(obj1).not.toBe(obj2);
});
it('Obj1 ==> Obj3', () => {
expect(obj1).toBe(obj3);
});
});
나는 ToEqual이 deep equal을 체크하고 있다고 생각한다, toBe는 두 변수의 동일한 참조이다.
it('test me', () => {
expect([] === []).toEqual(false) // true
expect([] == []).toEqual(false) // true
expect([]).toEqual([]); // true // deep check
expect([]).toBe([]); // false
})
(주석) 예를 들어 설명을 듣고 싶어할 것 같았습니다.
아래에서는 deepClone() 함수가 올바르게 기능하면 테스트('it()' 호출에 설명된 대로)가 성공합니다.
describe('deepClone() array copy', ()=>{
let source:any = {}
let clone:any = source
beforeAll(()=>{
source.a = [1,'string literal',{x:10, obj:{y:4}}]
clone = Utils.deepClone(source) // THE CLONING ACT TO BE TESTED - lets see it it does it right.
})
it('should create a clone which has unique identity, but equal values as the source object',()=>{
expect(source !== clone).toBe(true) // If we have different object instances...
expect(source).not.toBe(clone) // <= synonymous to the above. Will fail if: you remove the '.not', and if: the two being compared are indeed different objects.
expect(source).toEqual(clone) // ...that hold same values, all tests will succeed.
})
})
물론 deepClone()에 대한 완전한 테스트 스위트는 아닙니다. 어레이 내의 개체 리터럴(및 여기에 중첩된 개체 리터럴)도 ID가 구별되지만 값이 동일한지 테스트하지 않았기 때문입니다.
언급URL : https://stackoverflow.com/questions/22413009/jasmine-javascript-testing-tobe-vs-toequal
'programing' 카테고리의 다른 글
상대 경로에서 모듈 가져오기 (0) | 2022.09.17 |
---|---|
Jest의 it와 test의 차이점은 무엇입니까? (0) | 2022.09.17 |
npm install --legacy-peer-deps는 정확히 무엇을 합니까?언제가 권장됩니까? / 어떤 사용 사례가 있을 수 있습니까? (0) | 2022.09.17 |
JavaScript에서 연산자의 인스턴스는 무엇입니까? (0) | 2022.09.17 |
-Xmx3G를 사용하여 "VM 초기화 중 오류가 발생했습니다. 개체 힙에 충분한 공간을 예약할 수 없습니다." (0) | 2022.09.17 |