@grohden/create-mock-fn
v1.0.0
Published
A factory creator function mimicking factory_bot style with ts typing support
Readme
@grohden/create-mock-fn
A simple fn to create mock fns given previously generated types.
Installation
Hey, you can also just copy this to your project if you're ok with it :D
My initial gist is here, either copy it or the one in the src dir
Install with:
npm install --save-dev @grohden/create-mock-fnUsage
This was created with codegen for types in mind, it should work well if you generate types from open api/swagger definitions or from graphql codegen.
Basic Example
import { createMockFn } from '@grohden/create-mock-fn';
type User = {
id: string;
name: string;
role: 'admin' | 'user';
};
// Define your mock factory
export const mockUser = createMockFn(
(): User => ({
id: 'user-123',
name: 'John Doe',
role: 'user',
})
);
// Use it in tests
const defaultUser = mockUser();
// { id: 'user-123', name: 'John Doe', role: 'user' }
const customUser = mockUser({ name: 'Jane Doe' });
// { id: 'user-123', name: 'Jane Doe', role: 'user' }Using Traits
Traits allow you to define named variations of your mock.
export const mockUser = createMockFn(
(): User => ({
id: 'user-123',
name: 'John Doe',
role: 'user',
}),
{
admin: () => ({ role: 'admin' }),
premium: () => ({ name: 'Premium User' }),
}
);
// Apply traits
const admin = mockUser({}, ['admin']);
// { id: 'user-123', name: 'John Doe', role: 'admin' }
const premiumAdmin = mockUser({ id: 'custom-id' }, ['admin', 'premium']);
// { id: 'custom-id', name: 'Premium User', role: 'admin' }API
createMockFn(makeDefaults, traitMap?)
makeDefaults: A function that returns the default object structure.traitMap(optional): An object where keys are trait names and values are functions returning partial overrides.
Returns a function: (overrides?, traits?) => T
License
ISC
