Mocking Node.js Path Separators: The Dependency Injection Solution
The Problem
Node.js path utilities like path.sep
, path.join()
are hardcoded to the current platform and readonly - you can't mock them for cross-platform testing:
// Instead of this brittle approach:
function createTempFile(name: string, separator: string) {
return 'tmp' + separator + name; // Manual string manipulation
}
// Use dependency injection:
function createTempFile(name: string, pathImpl = path) {
return pathImpl.join('tmp', name);
}
// Now you can test both platforms reliably:
createTempFile('data.json', path.win32) // → tmp\data.json
createTempFile('data.json', path.posix) // → tmp/data.json
Why This Works
Node.js provides path.win32
and path.posix
as separate implementations. Instead of fighting the platform dependency, embrace it through clean dependency injection. Test Windows logic on Linux, test Unix logic on Windows - no mocking needed.