带有grunt的Nodeunit找不到模块'tap'

时间:2014-05-08 18:39:03

标签: node.js requirejs gruntjs npm nodeunit

因此,在this tutorial的帮助下,我决定在我的node.js应用程序中添加一些单元测试。我的grunt文件似乎没问题,当我输入grunt nodeunit时,我的唯一测试运行得很好,但在那之后,它崩溃并出现错误Fatal error: Cannot find module 'tap'

$> grunt nodeunit
Running "nodeunit:all" (nodeunit) task
Testing db.test.js
.OK
Fatal error: Cannot find module 'tap'

我对这个模块一无所知,但是在搞砸之后,看来它似乎是nodeunit需要的东西。事实上,它是:$MY_NODE_APP/node_modules/nodeunit/node_modules/tap存在,当我在$MY_NODE_APP/node_modules/nodeunit中启动节点并在交互式控制台中键入require('tap')时,我得到一些带有很多东西的对象给我一个印象它可以正常工作。

所以,显而易见的问题是:为什么我会收到此错误,我该如何解决?

Gruntfile:

module.exports = function(grunt) {

    grunt.initConfig({
        nodeunit: {
            all: ['./**/*.test.js']
        }
    });

    grunt.loadNpmTasks('grunt-contrib-nodeunit');
};

更新:已将tap安装到我的项目中,但它也没有帮助。

4 个答案:

答案 0 :(得分:7)

我着手解决这个问题并解决了我自己的问题。我会发布我的决议,因为它可能对其他人有帮助:

首先是相似之处:

我刚刚设置了Gulp脚本,运行测试时遇到了这个错误:

Fatal error: Cannot find module 'tap'

哪个没有意义,因为我没有使用该库!

我是如何解决的:

原来我的路径在我的gulpfile.js中搞砸了。因此,我试图对我的node_modules文件夹中的所有模块进行单元测试!

这是新路径:

 paths: {
      mocha: [
        '**/*.test.js',
        '!node_modules/**/*.js'
      ]
 }

答案 1 :(得分:0)

对我来说,问题是我无意中在node_modules目录中运行了测试。我的npm testmocha **/*.test.js,当我将其更改为mocha src/**/*.test.js时,消息突然消失。真有意义。

答案 2 :(得分:0)

我通过在“mocha”之后添加另一个'*'来解决问题,它与文件夹的路径相关,因此它也可以解决其他情况下的问题。

答案 3 :(得分:-1)

我通过手动安装tap模块解决了这个问题(好吧,这个问题 - 它不是最后一个)。