node-sass-magic-importer
Version:
Custom node-sass importer for selector specific imports, node importing, module importing, globbing support and importing files only once
65 lines (52 loc) • 2.07 kB
text/typescript
import * as path from 'path';
import { resolvePackageUrlFactory } from './resolve-package-url';
import { sassUrlVariantsFactory } from './sass-url-variants';
const sassUrlVariants = sassUrlVariantsFactory(path);
let dependencies: any;
describe(`resolvePackageUrl()`, () => {
beforeEach(() => {
dependencies = {
sassUrlVariants,
};
});
test(`It should be a function.`, () => {
const resolveMock = { sync: jest.fn().mockReturnValue(`resolved/path.scss`) } as any;
const resolvePackageKeysMock = jest.fn().mockReturnValue({});
const resolvePackageUrl = resolvePackageUrlFactory(
resolveMock,
resolvePackageKeysMock,
dependencies.sassUrlVariants,
);
expect(typeof resolvePackageUrl).toBe(`function`);
});
test(`It should resolve the path to a file in the node_modules directory.`, () => {
const url = `some/file.scss`;
const extensions = [`.scss`];
const cwd = `/`;
const packageKeys = [`main`];
const resolveMock = { sync: jest.fn().mockReturnValue(`resolved/path.scss`) } as any;
const resolvePackageKeysMock = jest.fn().mockReturnValue({});
const sassUrlVariantsMock = jest.fn().mockReturnValue([
`some/url/variant.scss`,
]);
const resolvePackageUrl = resolvePackageUrlFactory(
resolveMock,
resolvePackageKeysMock,
sassUrlVariantsMock,
);
const file = resolvePackageUrl(url, extensions, cwd, packageKeys);
expect(sassUrlVariantsMock).toBeCalledWith(url, extensions);
expect(resolveMock.sync.mock.calls[0][0]).toBe(`some/url/variant.scss`);
expect(file).toBe(`resolved/path.scss`);
});
test(`It should return \`null\` if no url can be resolved.`, () => {
const resolveMock = { sync: jest.fn().mockReturnValue(false) } as any;
const resolvePackageKeysMock = jest.fn().mockReturnValue({});
const resolvePackageUrl = resolvePackageUrlFactory(
resolveMock,
resolvePackageKeysMock,
dependencies.sassUrlVariants,
);
expect(resolvePackageUrl(``, [], ``, [])).toBe(null);
});
});