Skip to content

Latest commit

 

History

History

plugin-apply-overrides

@putout/plugin-apply-overrides NPM version

🐊Putout plugin adds ability to apply overrides.

Checkout in 🐊Putout Editor.

When you write testable code and want to avoid mocking required or imported modules, one of a solutions to use simple form of dependency injection:

import {readDirSync as _readdirSync} from 'node:fs/promises';

export const readRules = (dirOpt, rulesDir, overrides = {}) => {
    const {
        cwd,
        readdirSync = _readdirSync,
    } = overrides;
};

Pass overrides as last parameter, in this case use can test easily your function readFules:

import {test, stub} from 'supertape';

test('readRules', (t) => {
    const readdirSync = stub().returns([]);
    const rules = readRules('', '', {
        readdirSync,
    });
    
    t.equal(rules, []);
    t.end();
});

Then only issue is, when you have lots of parameters, your function declaration will be to long, or to hard to read, so recommended way is to use overrides variable.

Install

npm i @putout/plugin-apply-overrides

Rule

{
    "rules": {
        "apply-overrides": "on"
    }
}

❌ Example of incorrect code

async function matchToFlatDir(path, config, {readESLintConfig = _readESLintConfig} = {}) {}

✅ Example of correct code

async function matchToFlatDir(path, config, overrides = {}) {
    const {
        readESLintConfig = _readESLintConfig,
    } = overrides;
}

License

MIT