저는 단위 테스트를 처음 접했고 javascript로이 연습에 대한 자습서를 읽었습니다. 내 문제를 설명하기 위해 어리석은 예를 사용할 것이다.mocha chai 및 sinon과 독립적으로 javascript 기능을 테스트하는 방법은 무엇입니까?
존이 학교에 가야하고 그가 준비가되었는지 알기 전에 자신의 가방과 헤드폰이 있는지 확인해야한다고 가정 해 봅시다. 이것은 다음과 같은 함수를 호출 할 것이다 :
다음john.isReadyToGo;
문자 객체의 isReadtToGo() 함수의 구현이 될 때 :
이제characher.isReadyToGo = function() {
return this.hasBag() && this.hasHeadPhones();
}
characher.hasBag = function() {
// return true or false
}
characher.hasHeadPhones = function() {
//return true or false
}
,의 내가이 기능을 테스트 할 가정 해 봅시다. 단위 테스트에서는 다른 함수의 영향을받지 않고 함수를 테스트하는 것이 좋습니다. 즉,이 경우에는 세 함수를 테스트해야하지만 character.isReadyToGo() 함수는 this.hasBag() 및 this.hasHeadPhones()에 대한 모의 값을 가져야합니다. 내가 맞습니까?
그렇다면이 두 값을 조롱 할 수있는 방법에 대한 힌트를 제공해 줄 수 있습니까? 이것은 character.hasBag
및 character.hadHeadphones
(이것은 beforeEach
에서 행해진 다) 스텁 각 시험
let character = {};
character.isReadyToGo = function() {
return this.hasBag() && this.hasHeadPhones();
}
character.hasBag = function() {
// return true or false
}
character.hasHeadPhones = function() {
//return true or false
}
const sinon = require('sinon');
const expect = require('chai').expect;
describe('Is character ready?',() => {
beforeEach(() => {
sinon.stub(character, 'hasBag');
sinon.stub(character, 'hasHeadPhones');
});
afterEach(() => {
character.hasBag.restore();
character.hasHeadPhones.restore();
});
it("Not if they don't have a bag or headphones",() => {
character.hasBag.returns(false);
character.hasHeadPhones.returns(false);
expect(character.isReadyToGo()).to.be.false;
});
it("Not if they have headphones but no bag",() => {
character.hasBag.returns(false);
character.hasHeadPhones.returns(true);
expect(character.isReadyToGo()).to.be.false;
});
it("Not if they have a bag but no headphones",() => {
character.hasBag.returns(true);
character.hasHeadPhones.returns(false);
expect(character.isReadyToGo()).to.be.false;
});
it("Yes, if they have a bag and headphones",() => {
character.hasBag.returns(true);
character.hasHeadPhones.returns(true);
expect(character.isReadyToGo()).to.be.true;
});
});
:
사소한 세부 사항 -'.to.be.true; '대신'.to.be.true();'가되어서는 안됩니다. –
@JoeWhite [no] (http://chaijs.com/api/bdd/#true) = D – robertklep