parent
1af735f5eb
commit
35b6363915
|
@ -0,0 +1,21 @@
|
||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2016 Stephen Grider
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
|
@ -0,0 +1,25 @@
|
||||||
|
# ReduxSimpleStarter
|
||||||
|
|
||||||
|
Interested in learning [Redux](https://www.udemy.com/react-redux/)?
|
||||||
|
|
||||||
|
### Getting Started
|
||||||
|
|
||||||
|
There are two methods for getting started with this repo.
|
||||||
|
|
||||||
|
#### Familiar with Git?
|
||||||
|
Checkout this repo, install dependencies, then start the gulp process with the following:
|
||||||
|
|
||||||
|
```
|
||||||
|
> git clone https://github.com/StephenGrider/ReduxSimpleStarter.git
|
||||||
|
> cd ReduxSimpleStarter
|
||||||
|
> npm install
|
||||||
|
> npm start
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Not Familiar with Git?
|
||||||
|
Click [here](https://github.com/StephenGrider/ReactStarter/releases) then download the .zip file. Extract the contents of the zip file, then open your terminal, change to the project directory, and:
|
||||||
|
|
||||||
|
```
|
||||||
|
> npm install
|
||||||
|
> npm start
|
||||||
|
```
|
|
@ -0,0 +1,13 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<link rel="stylesheet" href="/style/style.css">
|
||||||
|
<link rel="stylesheet" href="https://cdn.rawgit.com/twbs/bootstrap/48938155eb24b4ccdde09426066869504c6dab3c/dist/css/bootstrap.min.css">
|
||||||
|
<script src="https://maps.googleapis.com/maps/api/js"></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="container"></div>
|
||||||
|
</body>
|
||||||
|
<script src="/bundle.js"></script>
|
||||||
|
</html>
|
|
@ -0,0 +1,37 @@
|
||||||
|
{
|
||||||
|
"name": "redux-simple-starter",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"description": "Simple starter package for Redux with React and Babel support",
|
||||||
|
"main": "index.js",
|
||||||
|
"repository": "git@github.com:StephenGrider/ReduxSimpleStarter.git",
|
||||||
|
"scripts": {
|
||||||
|
"start": "node ./node_modules/webpack-dev-server/bin/webpack-dev-server.js",
|
||||||
|
"test": "mocha --compilers js:babel-core/register --require ./test/test_helper.js --recursive ./test",
|
||||||
|
"test:watch": "npm run test -- --watch"
|
||||||
|
},
|
||||||
|
"author": "",
|
||||||
|
"license": "ISC",
|
||||||
|
"devDependencies": {
|
||||||
|
"babel-core": "^6.2.1",
|
||||||
|
"babel-loader": "^6.2.0",
|
||||||
|
"babel-preset-es2015": "^6.1.18",
|
||||||
|
"babel-preset-react": "^6.1.18",
|
||||||
|
"chai": "^3.5.0",
|
||||||
|
"chai-jquery": "^2.0.0",
|
||||||
|
"jquery": "^2.2.1",
|
||||||
|
"jsdom": "^8.1.0",
|
||||||
|
"mocha": "^2.4.5",
|
||||||
|
"react-addons-test-utils": "^0.14.7",
|
||||||
|
"webpack": "^1.12.9",
|
||||||
|
"webpack-dev-server": "^1.14.0"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"babel-preset-stage-1": "^6.1.18",
|
||||||
|
"lodash": "^3.10.1",
|
||||||
|
"react": "^0.14.3",
|
||||||
|
"react-dom": "^0.14.3",
|
||||||
|
"react-redux": "4.3.0",
|
||||||
|
"react-router": "^2.0.1",
|
||||||
|
"redux": "^3.0.4"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,9 @@
|
||||||
|
import React, { Component } from 'react';
|
||||||
|
|
||||||
|
export default class App extends Component {
|
||||||
|
render() {
|
||||||
|
return (
|
||||||
|
<div>React simple starter</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,15 @@
|
||||||
|
import React from 'react';
|
||||||
|
import ReactDOM from 'react-dom';
|
||||||
|
import { Provider } from 'react-redux';
|
||||||
|
import { createStore, applyMiddleware } from 'redux';
|
||||||
|
|
||||||
|
import App from './components/app';
|
||||||
|
import reducers from './reducers';
|
||||||
|
|
||||||
|
const createStoreWithMiddleware = applyMiddleware()(createStore);
|
||||||
|
|
||||||
|
ReactDOM.render(
|
||||||
|
<Provider store={createStoreWithMiddleware(reducers)}>
|
||||||
|
<App />
|
||||||
|
</Provider>
|
||||||
|
, document.querySelector('.container'));
|
|
@ -0,0 +1,7 @@
|
||||||
|
import { combineReducers } from 'redux';
|
||||||
|
|
||||||
|
const rootReducer = combineReducers({
|
||||||
|
state: (state = {}) => state
|
||||||
|
});
|
||||||
|
|
||||||
|
export default rootReducer;
|
|
@ -0,0 +1,14 @@
|
||||||
|
import { renderComponent , expect } from '../test_helper';
|
||||||
|
import App from '../../src/components/app';
|
||||||
|
|
||||||
|
describe('App' , () => {
|
||||||
|
let component;
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
component = renderComponent(App);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('renders something', () => {
|
||||||
|
expect(component).to.exist;
|
||||||
|
});
|
||||||
|
});
|
|
@ -0,0 +1,36 @@
|
||||||
|
import _$ from 'jquery';
|
||||||
|
import React from 'react';
|
||||||
|
import ReactDOM from 'react-dom';
|
||||||
|
import TestUtils from 'react-addons-test-utils';
|
||||||
|
import jsdom from 'jsdom';
|
||||||
|
import chai, { expect } from 'chai';
|
||||||
|
import chaiJquery from 'chai-jquery';
|
||||||
|
import { Provider } from 'react-redux';
|
||||||
|
import { createStore } from 'redux';
|
||||||
|
import reducers from '../src/reducers';
|
||||||
|
|
||||||
|
global.document = jsdom.jsdom('<!doctype html><html><body></body></html>');
|
||||||
|
global.window = global.document.defaultView;
|
||||||
|
global.navigator = global.window.navigator;
|
||||||
|
const $ = _$(window);
|
||||||
|
|
||||||
|
chaiJquery(chai, chai.util, $);
|
||||||
|
|
||||||
|
function renderComponent(ComponentClass, props = {}, state = {}) {
|
||||||
|
const componentInstance = TestUtils.renderIntoDocument(
|
||||||
|
<Provider store={createStore(reducers, state)}>
|
||||||
|
<ComponentClass {...props} />
|
||||||
|
</Provider>
|
||||||
|
);
|
||||||
|
|
||||||
|
return $(ReactDOM.findDOMNode(componentInstance));
|
||||||
|
}
|
||||||
|
|
||||||
|
$.fn.simulate = function(eventName, value) {
|
||||||
|
if (value) {
|
||||||
|
this.val(value);
|
||||||
|
}
|
||||||
|
TestUtils.Simulate[eventName](this[0]);
|
||||||
|
};
|
||||||
|
|
||||||
|
export {renderComponent, expect};
|
|
@ -0,0 +1,26 @@
|
||||||
|
module.exports = {
|
||||||
|
entry: [
|
||||||
|
'./src/index.js'
|
||||||
|
],
|
||||||
|
output: {
|
||||||
|
path: __dirname,
|
||||||
|
publicPath: '/',
|
||||||
|
filename: 'bundle.js'
|
||||||
|
},
|
||||||
|
module: {
|
||||||
|
loaders: [{
|
||||||
|
exclude: /node_modules/,
|
||||||
|
loader: 'babel',
|
||||||
|
query: {
|
||||||
|
presets: ['react', 'es2015', 'stage-1']
|
||||||
|
}
|
||||||
|
}]
|
||||||
|
},
|
||||||
|
resolve: {
|
||||||
|
extensions: ['', '.js', '.jsx']
|
||||||
|
},
|
||||||
|
devServer: {
|
||||||
|
historyApiFallback: true,
|
||||||
|
contentBase: './'
|
||||||
|
}
|
||||||
|
};
|
Loading…
Reference in New Issue