[英]How to test object from factory with mocha with sinon
我有一個工廠函數,可以創建吠叫的狗:
const dogFactory = () => {
const bark = name => console.log(`${name} just barked!`);
return{
bark
};
};
一個人會這樣使用它:
const dog = dogFactory();
dog.bark("boby"); //"boby just barked!"
我也有狗旅館。 生意不好,所以要保持露面,我要養狗! 因此,這家酒店將dogFactory
作為參數,如下所示:
const dogHotel = deps => {
const {
dogFactory
} = deps;
let dogsHosted = [];
const feed = () => {
dogsHosted.push(dogFactory());
dogsHosted.forEach( (dog, i) => dog.bark(i));
}
return{
feed
};
};
您將使用它像:
const hotelAwsome = dogHotel({dogFactory: dogFactory});
hotelAwsome.feed();
這家酒店喂狗。 因為沒有生意,它會養狗,然后喂飽所有人。 每次喂狗,都會發出幸福的叫聲!
有人會認為,在破損的旅館中養成無限的狗會是個問題,但事實並非如此!
這里的問題是我要確保狗的吠叫快樂。 也就是說,對於酒店bark
中的每只狗都被稱為。
這是我目前的測試。 我正在使用mocha
作為測試套件,正在使用sinon
監視我的假工廠對象:
const sinon = require( "sinon" );
const chai = require( "chai" );
const expect = chai.expect;
describe("dog hotel", () => {
const fakeFacory = () => {
const bark = () => sinon.spy()
return {bark};
};
it("should make the dogs bark with happiness when feeding them!", () => {
const hotelAweomse = dogHotel({dogFactory: fakeFacory});
hotelAwesome.feed();
//expect something here
});
});
這里的問題是我正在通過假冒的狗狗工廠,但是我無法向sinon詢問狗狗是否在吠叫!
我如何測試在酒店里養的狗是否吠叫?
您應該將間諜創建移出偽造工廠。 現在,您可以只在期望中使用間諜屬性 (callOnce,calls)。
有趣的問題的榮譽:)
describe("dog hotel", () => {
const spy = sinon.spy(); // create the spy outside
const fakeFacory = () => {
return {
bark: spy // assign it to bark
};
};
it("should make the dogs bark with happiness when feeding them!", () => {
const hotelAweomse = dogHotel({dogFactory: fakeFacory});
hotelAwesome.feed();
// expect only one bark
expect(spy.calledOnce).to.be.true;
// expect a number of barks
expect(spy.calls).to.equal(1);
});
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.