找不到磁带测试目录的node js模块

时间:2016-02-08 01:04:51

标签: node.js testing npm tap

我有以下结构:

src/examples/test_file.js
src/test/example.test.js

的package.json:

  "scripts": {
    "test": "node ./test/*.test.js"
  },

我通过npm install tape --save

安装了磁带

我跑npm test然后得到:

> node ./test/*.test.js

module.js:328
    throw err;
    ^

Error: Cannot find module 'c:\src\test\*.test.js'
    at Function.Module._resolveFilename (module.js:326:15)
    at Function.Module._load (module.js:277:25)
    at Function.Module.runMain (module.js:430:10)
    at startup (node.js:141:18)
    at node.js:1003:3
npm ERR! Test failed.  See above for more details.

根据这个:https://ci.testling.com/guide/tape

对整个目录的测试应仅适用于节点包的全局安装。如果没有全局安装磁带,我怎样才能使上述工作正常工作?

我正在使用节点5.4和Windows 10

编辑:

这对我在Mac上运行正常,并且在linux构建服务器上运行良好。我假设它的窗口相关

3 个答案:

答案 0 :(得分:0)

  

如何设置其他文件来运行所有其他测试?

一个选项可能是获取test目录中的文件列表,并为每个文件执行node命令。假设以下是 test.js ,它将运行与您指定的模式匹配的每个文件。

var fs = require('fs-extra')
  //child_process `exec` will let you normal bash-style executions
  //eg, exec('ls') is like programmatically entering the ls command
  //into a terminal window
  , exec = require("child_process").exec;

//callback for after our exec process finishes
function execCallback(error, stdout, stderr) { 
  console.log(stdout);
}
fs.readdir will give us a list of files in the current ('.') directory
var testFiles = fs.readdir('.', function(err, files){
  if (err){
    console.log('error reading files', err);
  }else{
    //use this regex to reduce the list of files to only those which
    //adhere to the pattern you specified using a wildcar "*.test.js"
    files.filter(function(file){
      return /^.*?\.test\.js/.test(file)
    })
    //filter returns the reduced array which is immediately passed to
    //this forEach loop which will use our `exec` command to execute
    //the shell command `node xxxxxx.test.js` for every file in the array we just created
    .forEach(function(testFile){
      exec('node ' + testFile, execCallback);
    });
  }
});

答案 1 :(得分:0)

  "scripts": {
       "test": "tape ./test/*.test.js"
     },

尝试使用对“ tape”(而不是“ node”)的调用来更新脚本语句 npm将在本地安装中找到磁带,该磁带位于./node_moduels/.bin/tape 无需通过节点发送

答案 2 :(得分:0)

您不必在单个文件中导入所有测试。您可以使用 tape 命令和 shell 的 globbing(文件扩展):

tape test/**/*.test.js

或者使用磁带的内置通配符:

tape 'test/**/*.test.js'

这仅在磁带位于您的 PATH 中时才有效(package.json 中的脚本将 node_modules/.bin 添加到 PATH)。否则,您必须提供 tape 的路径:

node_modules/.bin/tape test/**/*.test.js