@vitbokisch/next-optimized-images
Version:
Automatically optimize images used in next.js projects (jpeg, png, gif, svg).
91 lines (74 loc) • 2.95 kB
JavaScript
const withOptimizedImages = require('../lib');
const getNextConfig = (options, webpackOptions = {}) => {
const webpackConfig = {
module: {
rules: [],
},
};
return withOptimizedImages(options).webpack(Object.assign({}, webpackConfig), Object.assign({
defaultLoaders: [],
dev: false,
}, webpackOptions));
};
describe('next-optimized-images', () => {
it('returns a next.js config object', () => {
const config = withOptimizedImages();
expect(typeof config.webpack).toBe('function');
});
it('handles all images by default', () => {
const config = getNextConfig();
expect(config.module.rules).toHaveLength(2);
const rule = config.module.rules[0];
const webpRule = config.module.rules[1];
expect(rule.test.test('.jpg')).toEqual(true);
expect(rule.test.test('.jpeg')).toEqual(true);
expect(rule.test.test('.png')).toEqual(true);
expect(rule.test.test('.gif')).toEqual(true);
expect(rule.test.test('.svg')).toEqual(true);
expect(rule.test.test('.JPG')).toEqual(true);
expect(rule.test.test('.JPEG')).toEqual(true);
expect(rule.test.test('.PNG')).toEqual(true);
expect(rule.test.test('.GIF')).toEqual(true);
expect(rule.test.test('.SVG')).toEqual(true);
expect(rule.test.test('.webp')).toEqual(false);
expect(rule.test.test('.WEBP')).toEqual(false);
expect(webpRule.test.test('.webp')).toEqual(true);
expect(webpRule.test.test('.WEBP')).toEqual(true);
});
it('can disable image types', () => {
const config = getNextConfig({ handleImages: ['jpeg'] });
expect(config.module.rules).toHaveLength(1);
const rule = config.module.rules[0];
expect(rule.test.test('.jpg')).toEqual(true);
expect(rule.test.test('.jpeg')).toEqual(true);
expect(rule.test.test('.png')).toEqual(false);
expect(rule.test.test('.gif')).toEqual(false);
expect(rule.test.test('.svg')).toEqual(false);
expect(rule.test.test('.JPG')).toEqual(true);
expect(rule.test.test('.JPEG')).toEqual(true);
expect(rule.test.test('.PNG')).toEqual(false);
expect(rule.test.test('.GIF')).toEqual(false);
expect(rule.test.test('.SVG')).toEqual(false);
expect(rule.test.test('.webp')).toEqual(false);
expect(rule.test.test('.WEBP')).toEqual(false);
});
it('propagates and merges configuration', () => {
const config = getNextConfig({
webpack: (webpackConfig, webpackOptions) => {
expect(webpackConfig.module.rules).toHaveLength(2);
expect(webpackOptions.dev).toEqual(false);
expect(webpackOptions.foo).toEqual('bar');
return Object.assign({
changed: true,
}, webpackConfig);
},
}, { foo: 'bar' });
expect(config.module.rules).toHaveLength(2);
expect(config.changed).toEqual(true);
});
it('only supports next.js >= 5', () => {
expect(() => {
getNextConfig({}, { defaultLoaders: false });
}).toThrow();
});
});