차이에서 "주장", "기대", "해야 한다"의 차이는 무엇입니까?
사이의 차이점은 무엇입니까?assert
,expect
,그리고.should
? 언제 무엇을 사용해야 합니까?
assert.equal(3, '3', '== coerces values to strings');
var foo = 'bar';
expect(foo).to.equal('bar');
foo.should.equal('bar');
차이점은 거기에 기록되어 있습니다.
세 인터페이스는 서로 다른 방식으로 주장을 수행합니다.궁극적으로 그들은 같은 일을 수행합니다.일부 사용자는 다른 스타일보다 한 스타일을 선호합니다.이와 같이 다음과 같은 몇 가지 기술적 고려 사항도 강조할 가치가 있습니다.
그
assert
그리고.expect
인터페이스가 수정되지 않음Object.prototype
,반면에.should
그렇다. 그래서 그들은 당신이 변화할 수 없거나 원하지 않는 환경에서 더 나은 선택입니다.Object.prototype
.그
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);
부울 또는 숫자와 같은 설명이 없는 주제와 함께 사용할 때 유용합니다.
할까
그should
style은 기대 인터페이스와 동일한 체인 가능한 주장을 허용하지만, 체인을 시작하기 위해 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
기능은, 반면에.should
require, 함수가 실행되고 있습니다.
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
'sourcecode' 카테고리의 다른 글
쿼리에서 START WITH로 시퀀스 만들기 (0) | 2023.11.04 |
---|---|
우커머스 체크아웃 ax 콜백 (0) | 2023.11.04 |
Powershell 스크립트에서 반환 값을 잡는 방법 (0) | 2023.11.04 |
쿼리를 하나의 레코드로 제한하면 성능이 향상됩니까? (0) | 2023.11.04 |
jQuery.live()와 .on()의 차이점은 무엇입니까? (0) | 2023.11.04 |