Skip to content

chore: move console messages to their own module #343

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 26 additions & 0 deletions spec/index.spec.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import sinon from 'sinon';
import { applyMiddleware, createStore } from 'redux';
import { default as logger, createLogger } from '../src';
import { REDUX_LOGGER_NOT_INSTALLED, REDUX_LOGGER_V3_BREAKING_CHANGE } from '../src/messages';

context('default logger', () => {
describe('init', () => {
Expand All @@ -18,6 +19,30 @@ context('default logger', () => {
store.dispatch({ type: 'foo' });
sinon.assert.notCalled(console.error);
});

describe('when exported default logger is used improperly', () => {
it('should log a breaking change error message once', () => {
try {
createStore(() => ({}), applyMiddleware(logger()));
} catch (e) {
sinon.assert.calledOnce(console.error);
sinon.assert.calledWith(console.error, REDUX_LOGGER_V3_BREAKING_CHANGE)
return null;
}

sinon.assert.fail('Creating a store when improperly using the exported default logger should raise an error');
});

it('should throw a runtime error', () => {
try {
createStore(() => ({}), applyMiddleware(logger()));
} catch (e) {
return null;
}

sinon.assert.fail('Creating a store when improperly using the exported default logger should raise an error');
});
})
});
});

Expand All @@ -36,6 +61,7 @@ context('createLogger', () => {

store.dispatch({ type: 'foo' });
sinon.assert.calledOnce(console.error);
sinon.assert.calledWith(console.error, REDUX_LOGGER_NOT_INSTALLED);
});

it('should be ok', () => {
Expand Down
32 changes: 7 additions & 25 deletions src/index.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
import printBuffer from './core';
import { timer } from './helpers';
import defaults from './defaults';
import {
REDUX_LOGGER_NOT_INSTALLED as REDUX_LOGGER_NOT_INSTALLED_MESSAGE,
REDUX_LOGGER_V3_BREAKING_CHANGE as REDUX_LOGGER_V3_BREAKING_CHANGE_MESSAGE,
} from './messages';

/* eslint max-len: ["error", 110, { "ignoreComments": true }] */
/**
* Creates logger with following options
Expand Down Expand Up @@ -41,23 +46,7 @@ function createLogger(options = {}) {
// Detect if 'createLogger' was passed directly to 'applyMiddleware'.
if (options.getState && options.dispatch) {
// eslint-disable-next-line no-console
console.error(`[redux-logger] redux-logger not installed. Make sure to pass logger instance as middleware:
// Logger with default options
import { logger } from 'redux-logger'
const store = createStore(
reducer,
applyMiddleware(logger)
)
// Or you can create your own logger with custom options http://bit.ly/redux-logger-options
import { createLogger } from 'redux-logger'
const logger = createLogger({
// ...options
});
const store = createStore(
reducer,
applyMiddleware(logger)
)
`);
console.error(REDUX_LOGGER_NOT_INSTALLED_MESSAGE);

return () => next => action => next(action);
}
Expand Down Expand Up @@ -111,14 +100,7 @@ const defaultLogger = ({ dispatch, getState } = {}) => {
return createLogger()({ dispatch, getState });
}
// eslint-disable-next-line no-console
console.error(`
[redux-logger v3] BREAKING CHANGE
[redux-logger v3] Since 3.0.0 redux-logger exports by default logger with default settings.
[redux-logger v3] Change
[redux-logger v3] import createLogger from 'redux-logger'
[redux-logger v3] to
[redux-logger v3] import { createLogger } from 'redux-logger'
`);
console.error(REDUX_LOGGER_V3_BREAKING_CHANGE_MESSAGE);
};

export { defaults, createLogger, defaultLogger as logger };
Expand Down
31 changes: 31 additions & 0 deletions src/messages.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
const REDUX_LOGGER_NOT_INSTALLED = `[redux-logger] redux-logger not installed. Make sure to pass logger instance as middleware:
// Logger with default options
import { logger } from 'redux-logger'
const store = createStore(
reducer,
applyMiddleware(logger)
)
// Or you can create your own logger with custom options http://bit.ly/redux-logger-options
import { createLogger } from 'redux-logger'
const logger = createLogger({
// ...options
});
const store = createStore(
reducer,
applyMiddleware(logger)
)
`;

const REDUX_LOGGER_V3_BREAKING_CHANGE = `
[redux-logger v3] BREAKING CHANGE
[redux-logger v3] Since 3.0.0 redux-logger exports by default logger with default settings.
[redux-logger v3] Change
[redux-logger v3] import createLogger from 'redux-logger'
[redux-logger v3] to
[redux-logger v3] import { createLogger } from 'redux-logger'
`;

export {
REDUX_LOGGER_NOT_INSTALLED,
REDUX_LOGGER_V3_BREAKING_CHANGE,
};