node.js - 咕噜声+ Mocha 测试: Change working directory?

标签 node.js gruntjs mocha.js

我正在尝试使用 grunt-mocha-test 对我的 nodejs 项目实现测试并且存在不同/不正确路径的问题。

就像我在别处看到的那样,我想通过只需要我的 server.js 来获得所有依赖项。

gruntfile.js

mochaTest: {
  test: {
    options: {
      reporter: 'spec',
      require: 'app/server.js'
    },
    src: ['app/test/**/*.js']
  }
}

我目前的项目结构是这样的

gruntfile.js
app/server.js
app/models/..
app/controllers/..
app/tests/..

用户.controller.test.js

var userCtl = require('../controllers/users.controller');

describe("return5", function () {
  it("should return 5", function () {
    var result = userCtl.return5(null, null);
    expect(result).toBe(5);
  });
});

用户.controller.js

var mongoose = require('mongoose');
var User = mongoose.model('User'); // <- Mocha crash: Schema hasn't been registered for model "User".
..

在我的 server.js 中,我使用:

..
// config.js: https://github.com/meanjs/mean/blob/master/config/config.js
config.getGlobbedFiles('./models/**/*.js').forEach(function (path) {
  require(path); // never called with mochaTest
});
..
console.log(process.cwd()); // "C:\path\project" (missing /app)
..

所以 cwd 与它应该的不同。

有人可以帮我解决这个问题吗?

一旦我知道我做错了什么,我会尽快澄清标题。

谢谢。

最佳答案

混淆是由于模块路径和文件系统路径之间的差异。

当您执行 require("./blah") 时,. 被解释为“从当前模块的路径开始”。由于这与您当前所在的模块相关,因此它将根据模块所在的位置解析为不同的值。

当您运行 process.cwd() 时,这将返回进程的当前工作目录。这不会随着模块的不同而改变。当您的代码调用 process.chdir() 时,它会发生变化。此外,当您执行使用 . 的文件系统操作时,这是相对于 process.cwd() 进行解释的。

所以你从 process.cwd() 得到 C:\path\project 并不奇怪,因为这是你通常运行 Grunt 的地方(即在项目的顶层)。如果你想要相对于模块的路径,你可以做的是使用 __dirname。例如,此代码从 foo 子目录中读取文件,该子目录与包含此代码的模块位于同一位置:

var path = require("path");
var fs = require("fs");

var subdir = path.join(__dirname, "foo");
var foofiles = fs.readdirSync(subdir);

关于node.js - 咕噜声+ Mocha 测试: Change working directory?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25566784/

相关文章:

gruntjs - 如何在动态更改配置中的数据时在 for 循环中运行 grunt 任务?

node.js - Mocha MongoDB Mongoose ObjectId 引用在第一个 'it' 语句后消失

unit-testing - 在Rails中,有没有一种使用 `before_validation`参数测试 `:on`回调的好方法?

javascript - browserify api 用于在没有 gulp 的情况下提交文件以在成功时触发回调

javascript - 如何向 Node 添加错误处理/表达MySQL函数

gruntjs - 使用定义自定义步骤选项

javascript - 如何启用 Stylus url() 重写

javascript - Mocha 测试总是通过

javascript - 要执行的 Connection.query

node.js - 如何从 VueJs 提交 "multipart/form-data"