sourcecode

차이에서 "주장", "기대", "해야 한다"의 차이는 무엇입니까?

codebag 2023. 11. 4. 10:39
반응형

차이에서 "주장", "기대", "해야 한다"의 차이는 무엇입니까?

사이의 차이점은 무엇입니까?assert,expect,그리고.should? 언제 무엇을 사용해야 합니까?

assert.equal(3, '3', '== coerces values to strings');
    
var foo = 'bar';
    
expect(foo).to.equal('bar');
    
foo.should.equal('bar');

차이점은 거기에 기록되어 있습니다.

세 인터페이스는 서로 다른 방식으로 주장을 수행합니다.궁극적으로 그들은 같은 일을 수행합니다.일부 사용자는 다른 스타일보다 한 스타일을 선호합니다.이와 같이 다음과 같은 몇 가지 기술적 고려 사항도 강조할 가치가 있습니다.

  1. assert그리고.expect인터페이스가 수정되지 않음Object.prototype,반면에.should그렇다. 그래서 그들은 당신이 변화할 수 없거나 원하지 않는 환경에서 더 나은 선택입니다.Object.prototype.

  2. assert그리고.expect인터페이스는 거의 모든 곳에서 사용자 지정 메시지를 지원합니다.예를 들어 다음과 같습니다.

     assert.isTrue(foo, "foo should be true");
     expect(foo, "foo should be true").to.be.true;
    

어설션이 실패하면 실패한 어설션과 함께 "foo would true" 메시지가 출력됩니다.사용자 지정 메시지를 설정할 수 있는 기회가 없습니다.should인터페이스.

(역사적 참고: 오랫동안 이 답변은 사용자 지정 메시지를 받기 위해 다음과 같이 언급했습니다.expect, 당신은 해결책을 사용해야 할 겁니다.Aurelien Ribon이 나에게 알려준 것은expect두 번째 매개 변수가 작동합니다.따라서 해결책이 필요하지 않습니다.어떤 버전의 Mocha가 이 메시지를 지원하기 시작했는지, 어떤 버전의 문서가 처음으로 그것을 문서화했는지를 찾을 수 없었습니다.)

참고:assert.isTrue(foo),expect(foo).to.be.true그리고.foo.should.be.true사용자 지정 메시지를 사용하지 않을 경우 all은 다음을 출력합니다.foo === 1:

    AssertionError: expected 1 to be true

그래서 그 동안에.expect그리고.should인터페이스는 읽기에 더 좋으며, 어설션이 실패했을 때 하나의 인터페이스가 다른 인터페이스보다 자연스럽게 더 유익한 것은 아닙니다.세 인터페이스 모두 동일한 이 메시지는 테스트 중이던 것이 정확히 무엇인지 알려주지 않고, 단지 당신이 얻은 값이1하지만 당신은 원했잖나true. 무엇을 테스트하고 있었는지 알고 싶다면 메시지를 추가해야 합니다.

이 간단한 예들이 그들의 차이점을 명확하게 해주기를 바랍니다.

주장하다

var assert = require('chai').assert
const foo = 'bar'
const beverages = { tea: [ 'chai', 'matcha', 'oolong' ] };

assert.typeOf(foo, 'string'); // without optional message
assert.typeOf(foo, 'string', 'foo is a string'); // with optional message
assert.equal(foo, 'bar', 'foo equal `bar`');
assert.lengthOf(foo, 3, 'foo`s value has a length of 3');
assert.lengthOf(beverages.tea, 3, 'beverages has 3 types of tea');

모든 경우 assert 스타일을 사용하면 assert 문의 마지막 매개변수로 선택적 메시지를 포함할 수 있습니다.이러한 내용은 주장이 전달되지 않을 경우 오류 메시지에 포함됩니다.

메모 expect그리고.should는 주장을 구성하기 위해 체인 가능한 언어를 사용하지만 처음 주장을 구성하는 방식이 다릅니다.의 경우should, 또한 약간의 주의사항들과 그 주의사항들을 극복하기 위한 추가적인 도구들이 있습니다.

기대하다

var expect = require('chai').expect
const foo = 'bar'
const beverages = { tea: [ 'chai', 'matcha', 'oolong' ] };
expect(foo).to.be.a('string');
expect(foo).to.equal('bar');
expect(foo).to.have.lengthOf(3);
expect(beverages).to.have.property('tea').with.lengthOf(3);

expect발생할 수 있는 실패한 주장에 추가하기 위해 임의 메시지를 포함할 수 있습니다.

var answer = 43;

// AssertionError: expected 43 to equal 42.
expect(answer).to.equal(42);

// AssertionError: topic [answer]: expected 43 to equal 42.
expect(answer, 'topic [answer]').to.equal(42);

부울 또는 숫자와 같은 설명이 없는 주제와 함께 사용할 때 유용합니다.

할까

shouldstyle은 기대 인터페이스와 동일한 체인 가능한 주장을 허용하지만, 체인을 시작하기 위해 should 속성을 가진 각 객체를 확장합니다.이 스타일은 Internet Explorer와 함께 사용할 때 몇 가지 문제가 있으므로 브라우저 호환성에 유의해야 합니다.

var should = require('chai').should() //actually call the function
const foo = 'bar'
const beverages = { tea: [ 'chai', 'matcha', 'oolong' ] };

foo.should.be.a('string');
foo.should.equal('bar');
foo.should.have.lengthOf(3);
beverages.should.have.property('tea').with.lengthOf(3);

기대와 기대 사이의 차이

우선, 주목할 것은expect요구는 단지 에 대한 언급일 뿐입니다.expect기능은, 반면에.shouldrequire, 함수가 실행되고 있습니다.

var chai = require('chai')
const expect = chai.expect
const should = chai.should();

기대 인터페이스는 언어 주장을 연결하는 출발점으로서의 기능을 제공합니다.node.js 및 모든 브라우저에서 작동합니다.

should 인터페이스는 Object.prototype을 확장하여 언어 주장의 시작점으로 단일 게터를 제공합니다.node.js 및 Internet Explorer를 제외한 모든 최신 브라우저에서 작동합니다.

제가 틀렸다면 고쳐주세요. 하지만 코드 실행 행동에 있어서도 주장과 기대 사이에는 큰 차이가 있습니다.Assert는 오류 시 프로그램을 중지하도록 되어 있습니다.기대는 그렇지 않습니다.

언급URL : https://stackoverflow.com/questions/21396524/what-is-the-difference-between-assert-expect-and-should-in-chai

반응형