Skip to content

Commit b5c4ecb

Browse files
author
mmasterson
committed
#17 Test for unsubscribe on destroy.
1 parent 2f34f31 commit b5c4ecb

File tree

2 files changed

+39
-27
lines changed

2 files changed

+39
-27
lines changed

force-app/main/default/aura/Redux/ReduxController.js

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
if(window.reducerQueue && window.reducerQueue[reduxName]) {
1818
combinedReducer = Redux.combineReducers(Object.assign({}, reducerObject, window.reducerQueue[reduxName]));
19+
window.reducerRegistry = {};
1920
window.reducerRegistry[reduxName] = Object.assign({}, window.reducerRegistry[reduxName], reducerObject, window.reducerQueue[reduxName]);
2021
} else if(window.reducerRegistry && window.reducerRegistry[reduxName]) {
2122
combinedReducer = Redux.combineReducers(reducerObject);
@@ -90,7 +91,7 @@
9091
var listener = params ? params.listener : null;
9192

9293
if(listener && window.reduxStore && window.reduxStore[reduxName]) {
93-
window.reduxStore[reduxName].subscribe(listener);
94+
return window.reduxStore[reduxName].subscribe(listener);
9495
}
9596
},
9697

@@ -147,12 +148,7 @@
147148
for(var key in mapStateToAttributes) {
148149
if(mapStateToAttributes.hasOwnProperty(key)) {
149150
if(typeof mapStateToAttributes[key] === "function") {
150-
try {
151-
var returnedFunction = mapStateToAttributes[key]();
152-
target.set(key, returnedFunction(state, target));
153-
} catch(e) {
154-
target.set(key, mapStateToAttributes[key](state, target))
155-
}
151+
target.set(key, mapStateToAttributes[key](state, target))
156152
} else {
157153
target.set(key, state[mapStateToAttributes[key]]);
158154
}

force-app/test/default/staticresources/reduxTests.resource

Lines changed: 36 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -201,34 +201,50 @@ describe("Redux Tests", function() {
201201

202202
it('unsubscribes when destroyed', function(done) {
203203
var renderInto = document.getElementById("renderTestComponents");
204-
$T.createComponent("c:TestReduxContainer", {}, renderInto)
204+
var originalComponent;
205+
var called = 0;
206+
$T.createComponent("c:Redux", {}, renderInto)
205207
.then(function(component) {
206-
207-
var redux = component.find("store");
208-
209-
var toggle = false;
210-
function toggleReducer(state, action) {
211-
toggle = !toggle;
212-
if(toggle) {
213-
return "Toggle is True";
214-
} else {
215-
return "Toggle is False";
208+
originalComponent = component;
209+
function reducer(state, action) {
210+
switch (action.type) {
211+
case 'INCREMENT':
212+
return state + 1;
213+
case 'DECREMENT':
214+
return state - 1;
215+
default:
216+
var defaultState = 0;
217+
return defaultState;
216218
}
217219
}
218220

219-
redux.createStore("toggle", toggleReducer);
221+
function handleChanges() {
222+
called++;
223+
}
220224

221-
var mapStateToAttributes = {
222-
"v.message": "toggle"
223-
};
225+
component.createStore("counter", reducer);
226+
component.unsubscribe = component.subscribe(handleChanges);
227+
component.dispatch({type: "INCREMENT"});
224228

225-
redux.connect(mapStateToAttributes, component);
226-
expect(component.get("v.message")).toBe("Toggle is True");
229+
expect(called).toBe(1);
230+
component.dispatch({type: "INCREMENT"});
231+
expect(called).toBe(2);
232+
}).catch(function(e) {
233+
done.fail(e);
234+
});
235+
236+
$T.createComponent("c:Redux", {}, renderInto)
237+
.then(function(component) {
238+
function reducer(state, action) {
239+
return "Hello World"
240+
}
241+
242+
originalComponent.destroy();
243+
component.createStore("helloWorld", reducer);
227244
component.dispatch({type: "INCREMENT"});
228-
expect(component.get("v.message")).toBe("Toggle is False");
229-
component.destroy();
245+
230246
component.dispatch({type: "INCREMENT"});
231-
expect(component.get("v.message")).toBe("Toggle is True");
247+
expect(called).toBe(2);
232248
done();
233249
}).catch(function(e) {
234250
done.fail(e);

0 commit comments

Comments
 (0)