# My node unit test always times out

**URL:** <https://discourse.nodered.org/t/my-node-unit-test-always-times-out/71905>\
**Category:** Developing Nodes\
**Tags:** function-node\
**Created:** [9 December 2022 06:41 UTC](https://discourse.nodered.org/t/my-node-unit-test-always-times-out/71905 "2022-12-09T06:41:49Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![kakyoism](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/kakyoism/32/46283_2.png) [@kakyoism](https://discourse.nodered.org/u/kakyoism)\
**Post date:** [9 December 2022 06:41 UTC](https://discourse.nodered.org/t/my-node-unit-test-always-times-out/71905/1 "2022-12-09T06:41:49Z")

</div>

I'm trying to follow [`node-red-node-test-helper`'s doc](https://github.com/node-red/node-red-node-test-helper) to unittest a custom node.  
However, although the node loads OK, the functional test always times out.

See my mocha spec below:

```nohighlight
var should = require('should');
var helper = require("node-red-node-test-helper");
var targetNode = require("../node.js");

helper.init(require.resolve('node-red'));

describe('Dummy Node', function () {
// this.timeout(10000);

  beforeEach(function (done) {
      helper.startServer(done);
  });

  afterEach(function (done) {
      helper.unload();
      helper.stopServer(done);
  });

  it('should be loaded', function (done) {
    var flow = [{ id: "n1", type: "dummy", name: "dummy node" }];
    helper.load(targetNode, flow, function () {
      var n1 = helper.getNode("n1");
      try {
        n1.should.have.property('name', 'dummy node');
        done();
      } catch (e) {
        done(e)
      }
    });
  });

  it('should make payload lower case', function (done) {
    var flow = [
	    { id: "n1", type: "dummy", name: "dummy node", wires:[["n2"]] },
	    { id: "n2", type: "helper" }
	];
    helper.load(targetNode, flow, function () {
      var n2 = helper.getNode("n2");
      var n1 = helper.getNode("n1");
      n2.on("input", function (msg) {
        try {
	        msg.should.have.property('payload', {'name': 'TOUPPER'});
	        done();
	    } catch (e) {
	        done(e);
	    }
      });
      n1.receive({ topic: "", payload: {'name': "toupper"} });
    });
  });
});

```

The test result:

```nohighlight
(.venv) (14:36) me@my-mac:~/Desktop/dummy/node 
$ npm test

> dummy@0.1.0 test /Users/me/Desktop/dummy/node
> mocha --exit "test/*_spec.js"

  Dummy Node
    ✔ should be loaded
    1) should make payload lower case

  1 passing (2s)
  1 failing

  1) Dummy Node
       should make payload lower case:
     Error: Timeout of 2000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves. (/Users/me/Desktop/dummy/node/test/flow_spec.js)
      at listOnTimeout (internal/timers.js:557:17)
      at processTimers (internal/timers.js:500:7)

npm ERR! Test failed. See above for more details.

```

Tweaking the timeout value does not help.  
I can't figure out where I did wrong. Please help.

---

<div class="post-metadata">

**Author:** ![kakyoism](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/kakyoism/32/46283_2.png) [@kakyoism](https://discourse.nodered.org/u/kakyoism)\
**Post date:** [9 December 2022 07:19 UTC](https://discourse.nodered.org/t/my-node-unit-test-always-times-out/71905/2 "2022-12-09T07:19:09Z")

</div>

Solved it myself.

Somewhere in the node implementation the backend has a popup prompt that blocks the test. After removing it the problem is solved.

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/1X/d073cd938eafa2e558d7c2cd59003b3ef4963033.png) [@system](https://discourse.nodered.org/u/system)\
**Post date:** [23 December 2022 07:19 UTC](https://discourse.nodered.org/t/my-node-unit-test-always-times-out/71905/3 "2022-12-23T07:19:54Z")

</div>

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.
