vitaly-rudenko / qilan

JavaScript mocking framework inspired by Mockito.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Qilan concept

Mocks

Creating a mock from a class

class Dog {
	bark(type) { /* ... */ }
	async woof() { /* ... */ }
}

const dog = mock(Dog);

Spies

Creating a spy

const bark = spy();
const woof = when().resolve();

const meow = when(() => spy()).do('m-m-meow');
const purr = when(() => spy('purr?')).return('purr!');

Spying on all methods & properties

spy(dog);

Custom behavior

Simple

when(() => dog.name).return('Cooper');
when(() => dog.bark()).do(() => console.log('bark!'));

Multiple calls

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

Arguments

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}!`);

Expectations

Equality assertion

same(dog.breed, 'Doge');
equal(dog.age, any(Number));

Call expectations

called(() => dog.bark(anyArgs()));
calledOnce(() => dog.woof());
calledTimes(5, () => cat.meow(true));
notCalled(() => cat.purr(any(String), any()));

About

JavaScript mocking framework inspired by Mockito.

License:GNU General Public License v3.0


Languages

Language:JavaScript 100.0%