我正在尝试使用mock-cli在cli应用程序的摩卡测试中存根process.arv。我想测试将不正确的参数(“ imit”)传递给process.argv(由命令定义)时是否在console.logged消息。

我正在尝试根据文档改编该示例,但我认为我没有正确设置所有内容。


我注释掉“ stdin: require('../mocks/fakeInputStream'), // Hook up a fake input stream”时它通过了,尽管我知道它无法正常工作
如下所述运行时,它失败并显示TypeError: sourceStream.on is not a function


有人可以看到我所缺少的吗?

/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);
    });

最佳答案

../mocks/fakeInputStream是有效路径吗?
../mocks/fakeInputStream中的对象是否是ReadableStream的有效实例?



  source code在GitHub上可用。


确保满足captureStdin(sourceStream, callback)功能的要求。
该模块使用该功能捕获您的fakeInputStream并将其通过管道传送到captureStream

09-18 18:18