class Dog {
bark(type) { /* ... */ }
async woof() { /* ... */ }
}
const dog = mock(Dog);
const bark = spy();
const woof = when().resolve();
const meow = when(() => spy()).do('m-m-meow');
const purr = when(() => spy('purr?')).return('purr!');
spy(dog);
when(() => dog.name).return('Cooper');
when(() => dog.bark()).do(() => console.log('bark!'));
when(() => dog.name).return('Cooper', 'Baxter');
when(() => dog.bark()).do(
() => console.log('odd bark!'),
() => console.log('even bark!'),
);
console.log(dog.name, dog.name, dog.name); // Cooper Baxter Cooper
console.log(dog.bark(), dog.bark(), dog.bark()); // odd bark! even bark! odd bark!
when(() => dog.name).returnOnce('Cooper', 'Baxter');
when(() => dog.bark()).doOnce(
() => console.log('first bark!'),
() => console.log('second bark!'),
);
console.log(dog.name, dog.name, dog.name); // Cooper Baxter undefined
console.log(dog.bark(), dog.bark(), dog.bark()); // first bark! second bark! undefined
when(() => cat.meow()).do(type => 'meow');
when(() => cat.meow(anyArgs())).do(type => 'm-m-meow');
when(() => dog.bark(any(String))).do(type => `${type} bark!`);
when(() => dog.bark(any(Number))).do(count => `bark #${count}!`);
same(dog.breed, 'Doge');
equal(dog.age, any(Number));
called(() => dog.bark(anyArgs()));
calledOnce(() => dog.woof());
calledTimes(5, () => cat.meow(true));
notCalled(() => cat.purr(any(String), any()));