2017-11-23 3 views
1

Ich versuche mock-cli zu verwenden, um process.arv in Mokka-Tests für eine CLI-App stub. Ich möchte testen, dass eine Nachricht console.logged ist, wenn ein falsches Argument ("imit") an process.argv übergeben wird (wie durch Befehle definiert).Konfigurieren von mock-cli

Ich versuche, das Beispiel aus der Dokumentation anzupassen, aber ich glaube nicht, dass ich alles richtig eingerichtet habe.

  1. es passiert, wenn ich einen Kommentar out „stdin: require('../mocks/fakeInputStream'), // Hook up a fake input stream“ obwohl ich es weiß, ist nicht richtig
  2. arbeitet es mit TypeError: sourceStream.on is not a function schlägt fehl, wenn unter
  3. wie beschrieben ausgeführt

Kann jemand sehen, was mir fehlt?

/index.js

var commands = ['init']; 

    function getGitHeadArgs() { 
     return process.argv.slice(2, process.argv.length); 
    } 

if (getGitHeadArgs().length) { 
    if (!commands.includes(getGitHeadArgs()[0])) { 
    console.log("Silly Githead! That's not a githead command"); 
    } 
    eval(getGitHeadArgs()[0])(); 
} else { 
    console.log("You didn't tell githead to do anything!"); 
} 

/testIndex.js

var assert = require('assert'); 
var index = require('../index.js'); 
var mockCli = require("mock-cli"); 

describe("incorrect argument", function() { 

     it("imit throws an error if an invalid command is raised", function() { 

     var argv = ['node', '../index.js', 'imit']; // Fake argv 

     var stdio = { 
      stdin: require('../mocks/fakeInputStream'), // Hook up a fake input stream 
      stdout: process.stdout, // Display the captured output in the main console 
      stderr: process.stderr // Display the captured error output in the main console 
     }; 

     var kill = mockCli(argv, stdio, function onProcessComplete(error, result) { 
      var exitCode = result.code; // Process exit code 
      var stdout = result.stdout; // UTF-8 string contents of process.stdout 
      var stderr = result.stderr; // UTF-8 string contents of process.stderr 

      assert.equal(exitCode, 0); 
      assert.equal(stdout, "Silly Githead! That's not a githead command\n"); 
      assert.equal(stderr, ''); 
     }); 

     // Execute the CLI task 
     require('../index.js'); 

     // Kill the task if still running after one second 
     setTimeout(kill, 1000); 
    }); 

Antwort

0
  • Ist ../mocks/fakeInputStream ein gültiger Pfad?

  • Ist das Objekt unter ../mocks/fakeInputStream eine gültige Instanz von ReadableStream?

Die source code ist bei GitHub avalible.

Stellen Sie sicher, dass Sie die Anforderungen für die captureStdin(sourceStream, callback)-Funktion erfüllen. Das Modul verwendet diese Funktion, um Ihre fakeInputStream zu erfassen und in eine captureStream zu leiten.