我正在node.js上开发一个CLI工具。我正在尝试为tdd设置我的环境,但是我很难用gulp来完成它。
我所有的“独立”任务都是从工作中吸取的。下面是它们:
构建任务:
var tsProject = ts.createProject({
declarationFiles: true,
noEmitOnError: true,
module: 'commonjs',
target: 'es5',
sortOutput: true,
typescript: require('typescript') //usefull during typescript 1.5 alpha
});
gulp.task('build', function() {
var tsResult = gulp.src([
PATHS.lib + '/**/*.ts'
])
.pipe(sourcemaps.init())
.pipe(ts(tsProject));
return merge([ // Merge the two output streams, so this task is finished when the IO of both operations are done.
tsResult.dts.pipe(gulp.dest(PATHS.build + '/definitions')),
tsResult.js
.pipe(sourcemaps.write())
.pipe(gulp.dest(PATHS.build + '/js'))
]);
});
测试任务:
gulp.task('test', ['build'], function () {
return gulp.src(PATHS.test + '/**/*.js', {read: false})
.pipe(mocha({
reporter: 'spec',
globals: {
should: require('should'),
sinon: require('sinon'),
mockery: require('mockery')
}
}))
.on('error', gutil.log);
});
如您所见,我有一个任务,将我的类型记录文件构建到与es5兼容的js中。还有一个用先例构建来运行我的测试的任务。
如果我一个人管理他们。它起作用了。
我试图添加一个手表模式:
构建:watch:
gulp.task('build:watch', ['build'], function() {
gulp.watch([
PATHS.lib + '/**/*.ts'
], ['build']);
});
测试:手表:
gulp.task('test:watch', ['test'], function () {
gulp.watch([
PATHS.lib + '/**/*.ts',
PATHS.test + '/**/*.js'
], ['test']);
});
构建:查看工作。每次编辑类型记录文件时,都会触发生成任务并重新生成我的项目。(这里不太相关,因为测试任务会触发构建。这仅仅是说这个手表模式起作用了)
测试:观看不起作用。第一次迭代(由任务依赖项触发)工作,但是当我编辑类型记录文件或测试文件时,我得到了以下错误:
{ [TypeError: Cannot read property 'defaultEncoding' of undefined]
domain:
{ domain: null,
_events: { error: [Function: handleException] },
_maxListeners: undefined,
members: [] },
domainThrown: true,
name: 'TypeError',
message: 'Cannot read property \'defaultEncoding\' of undefined',
stack: 'TypeError: Cannot read property \'defaultEncoding\' of undefined\n at DestroyableTransform.Writable.write (/Users/thomashourlier/Documents/Work/jsProjects/hawker/node_modules/gulp/node_modules/vinyl-fs/node_modules/through2/node_modules/readable-stream/lib/_stream_writable.js:186:21)\n at Glob.<anonymous> (/Users/thomashourlier/Documents/Work/jsProjects/hawker/node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/index.js:44:14)\n at Glob.emit (events.js:107:17)\n at Glob._emitMatch (/Users/thomashourlier/Documents/Work/jsProjects/hawker/node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/node_modules/glob/glob.js:457:8)\n at Glob._processReaddir2 (/Users/thomashourlier/Documents/Work/jsProjects/hawker/node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/node_modules/glob/glob.js:405:12)\n at /Users/thomashourlier/Documents/Work/jsProjects/hawker/node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/node_modules/glob/glob.js:345:17\n at RES (/Users/thomashourlier/Documents/Work/jsProjects/hawker/node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/node_modules/glob/node_modules/inflight/inflight.js:23:14)\n at /Users/thomashourlier/Documents/Work/jsProjects/hawker/node_modules/gulp/node_modules/vinyl-fs/node_modules/glob-stream/node_modules/glob/node_modules/inflight/inflight.js:30:13\n at process._tickDomainCallback (node.js:381:11)',
showStack: true,
showProperties: true,
plugin: 'gulp-mocha' }
如果你想的话,在这里的吞咽堆栈:
[10:58:24] Using gulpfile ~/Documents/Work/jsProjects/hawker/gulpfile.js
[10:58:24] Starting 'build'...
[10:58:25] Finished 'build' after 1.01 s
[10:58:25] Starting 'test'...
Hawker
✓ should get the Logger
✓ should get the Parser
✓ should define a file loader
✓ should define a url loader
✓ should launch hawker
FileLoader
✓ should be defined
✓ should get a configuration file
Parser
✓ should be defined
✓ should parse configuration file
9 passing (24ms)
[10:58:26] Finished 'test' after 98 ms
[10:58:26] Starting 'test:watch'...
[10:58:26] Finished 'test:watch' after 14 ms
[10:58:28] Starting 'build'...
[10:58:28] { [TypeError: Cannot read property 'defaultEncoding' of undefined] ...
你有什么建议吗?
发布于 2015-04-20 11:42:10
好吧,我发现问题了。
我在我的单元测试中使用了嘲弄,并且在一些测试之后我忘记了禁用它。我只是在我的测试文件中添加:
afterEach(function() {
mockery.disable();
});
祝你今天愉快。托马斯
https://stackoverflow.com/questions/29755219
复制相似问题