mean.io 单元测试不 运行
mean.io unit tests don't run
从全新的 mean.io 应用开始,即
mean init newApp
cd newApp
npm install [1]
bower install
[1] npm install --dev
导致 npm 永远 运行 并最终因内存不足错误而失败,所以我 运行 npm install
然后单独 npm install devPackage
对于 devDependencies
中列出的每个包
gulp env:test mochaTest
的输出是
Invoking gulp - development
[10:12:54] Using gulpfile ~/projects/kueDemo/gulpfile.js
[10:12:54] Starting 'env:test'...
[10:12:54] Finished 'env:test' after 56 μs
[10:12:54] Starting 'loadTestSchema'...
[10:12:54] Finished 'loadTestSchema' after 487 ms
[10:12:54] Starting 'mochaTest'...
0 passing (0ms)
[10:12:54] Finished 'mochaTest' after 48 ms
也没有任何测试失败,而且在文章包中肯定有很多 运行 的测试,所以我不明白为什么他们没有被选中。
注意:我必须按 CTRL-C 停止 gulp 任务并 return 到提示符
应用程序本身 运行开箱即用。如果我 运行 gulp test
,Karma 测试 运行 很好——mocha 测试仍然被忽略。
系统:
- 节点 v0.12.2
- npm v2.7.4
- meanio v0.9.26
好的,经过一些调试我发现这是 mean.io 源代码中的错误。
在 gulp/test.js
中应更改以下行:
第 20 行:
require('../node_modules/meanio/lib/core_modules/module/util').preload('../p
到
require('../node_modules/meanio/lib/core_modules/module/util').preload('./packages/**/server', 'model');
类似第24行:
return gulp.src('../packages/**/server/tests/*.js', {read: false})
到
return gulp.src('./packages/**/server/tests/*.js', {read: false})
node_modules/meanio/lib/core_modules/module/util
预加载函数现在将失败,但您可以通过修补 walk
函数中的 2 行 realPath 行来解决此问题:
// recursively walk modules path and callback for each file
function walk(wpath, type, excludeDir, callback) {
// regex - any chars, then dash type, 's' is optional, with .js or .coffee extension, case-insensitive
// e.g. articles-MODEL.js or mypackage-routes.coffee
var rgx = new RegExp('(.*)-' + type + '(s?).(js|coffee)$', 'i');
if (!fs.existsSync(wpath)) return;
fs.readdirSync(wpath).forEach(function(file) {
var newPath = path.join(wpath, file);
var stat = fs.statSync(newPath);
if (stat.isFile() && (rgx.test(file) || (baseRgx.test(file)) && ~newPath.indexOf(type))) {
var realPath = fs.realpathSync(newPath);
callback(realPath);
} else if (stat.isDirectory() && file !== excludeDir && ~newPath.indexOf(type)) {
walk(newPath, type, excludeDir, callback);
}
});
}
从全新的 mean.io 应用开始,即
mean init newApp
cd newApp
npm install [1]
bower install
[1] npm install --dev
导致 npm 永远 运行 并最终因内存不足错误而失败,所以我 运行 npm install
然后单独 npm install devPackage
对于 devDependencies
gulp env:test mochaTest
的输出是
Invoking gulp - development
[10:12:54] Using gulpfile ~/projects/kueDemo/gulpfile.js
[10:12:54] Starting 'env:test'...
[10:12:54] Finished 'env:test' after 56 μs
[10:12:54] Starting 'loadTestSchema'...
[10:12:54] Finished 'loadTestSchema' after 487 ms
[10:12:54] Starting 'mochaTest'...
0 passing (0ms)
[10:12:54] Finished 'mochaTest' after 48 ms
也没有任何测试失败,而且在文章包中肯定有很多 运行 的测试,所以我不明白为什么他们没有被选中。
注意:我必须按 CTRL-C 停止 gulp 任务并 return 到提示符
应用程序本身 运行开箱即用。如果我 运行 gulp test
,Karma 测试 运行 很好——mocha 测试仍然被忽略。
系统:
- 节点 v0.12.2
- npm v2.7.4
- meanio v0.9.26
好的,经过一些调试我发现这是 mean.io 源代码中的错误。
在 gulp/test.js
中应更改以下行:
第 20 行: require('../node_modules/meanio/lib/core_modules/module/util').preload('../p
到
require('../node_modules/meanio/lib/core_modules/module/util').preload('./packages/**/server', 'model');
类似第24行:
return gulp.src('../packages/**/server/tests/*.js', {read: false})
到
return gulp.src('./packages/**/server/tests/*.js', {read: false})
node_modules/meanio/lib/core_modules/module/util
预加载函数现在将失败,但您可以通过修补 walk
函数中的 2 行 realPath 行来解决此问题:
// recursively walk modules path and callback for each file
function walk(wpath, type, excludeDir, callback) {
// regex - any chars, then dash type, 's' is optional, with .js or .coffee extension, case-insensitive
// e.g. articles-MODEL.js or mypackage-routes.coffee
var rgx = new RegExp('(.*)-' + type + '(s?).(js|coffee)$', 'i');
if (!fs.existsSync(wpath)) return;
fs.readdirSync(wpath).forEach(function(file) {
var newPath = path.join(wpath, file);
var stat = fs.statSync(newPath);
if (stat.isFile() && (rgx.test(file) || (baseRgx.test(file)) && ~newPath.indexOf(type))) {
var realPath = fs.realpathSync(newPath);
callback(realPath);
} else if (stat.isDirectory() && file !== excludeDir && ~newPath.indexOf(type)) {
walk(newPath, type, excludeDir, callback);
}
});
}