summaryrefslogtreecommitdiffstats
path: root/devtools/client/shared/redux/middleware/xpcshell/test_middleware-task-03.js
blob: 31c83a3122a5cb5a43b80f3ccd02a611541df886 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

"use strict";

const {
  createStore,
  applyMiddleware,
} = require("resource://devtools/client/shared/vendor/redux.js");
const {
  task,
  ERROR_TYPE,
} = require("resource://devtools/client/shared/redux/middleware/task.js");

/**
 * Tests that the middleware handles errors thrown in tasks, and rejected promises.
 */

add_task(async function () {
  const store = applyMiddleware(task)(createStore)(reducer);

  store.dispatch(asyncError());
  await waitUntilState(store, () => store.getState().length === 1);
  equal(
    store.getState()[0].type,
    ERROR_TYPE,
    "generator errors dispatch ERROR_TYPE actions"
  );
  equal(
    store.getState()[0].error,
    "task-middleware-error-generator",
    "generator errors dispatch ERROR_TYPE actions with error"
  );
});

function asyncError() {
  return async () => {
    const error = "task-middleware-error-generator";
    throw error;
  };
}

function reducer(state = [], action) {
  info("Action called: " + action.type);
  if (action.type === ERROR_TYPE) {
    state.push(action);
  }
  return [...state];
}