title: Tests randomly failing with jest and node
body: <p>I needed to execute shell commands and keep the process alive to keep the changes made in the env variables, so I made a function that looks like this:</p>
  <pre><code>import { spawn } from 'child_process';
  
  function exec(command) {
  
      const bash = spawn('/bin/bash', {
          detached: true
      });
  
      bash.stdout.setEncoding('utf-8');
      bash.stderr.setEncoding('utf-8');
  
      return new Promise(resolve =&gt; {
          const result = {
              stdout: '',
              stderr: '',
              code: 0
          };
  
          bash.stdout.on('data', data =&gt; {
              // Removes the last line break (i.e \n) from the data.
              result.stdout += data.substring(0, data.length - 1);
  
              // Gets the code by getting the number before the `:` on the last line
              result.code = Number(result.stdout.split('\n').pop().split(':')[0]);
  
              resolve(result);
          });
  
          bash.stderr.on('data', err =&gt; {
              result.stderr += err;
  
              resolve(result);
          });
  
          // Writes the passed command and another to check the code of the command
          bash.stdin.write(command + `; echo &quot;$?:${ command }&quot;\n`);
      });
  }
  </code></pre>
  <p>The test is simple:</p>
  <pre><code>it('should run a command that outputs an error', async () =&gt; {
      // Notice the typo in `echoo`
      const res = await exec('echoo test');
  
      expect(res.code).toBe(127);
  });
  </code></pre>
  <p>When running this test, it <em>sometimes</em> fails with <code>res.code</code> being <strong>0</strong> instead of <strong>127</strong>.</p>
  <p>When testing without jest, it works flawlessly 100% of the time.</p>