programing

Jasmine JavaScript 테스트 - 목표와 목표의 비교

newsource 2022. 9. 17. 10:02

Jasmine JavaScript 테스트 - 목표와 목표의 비교

예를 들어 다음과 같습니다.

var myNumber = 5;
expect(myNumber).toBe(5);
expect(myNumber).toEqual(5);

을 사용하다toBe() ★★★★★★★★★★★★★★★★★」toEqual()자를를 평? ??만약 그렇다면, 한쪽만 사용하고 다른 한쪽은 사용하지 않는 것이 좋을까요?

들어 등, ),(: ),, ),, ),)는 차이가 없습니다.toBe ★★★★★★★★★★★★★★★★★」toEqual5,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