Stream 大口大口喝摩卡咖啡不管用

Stream 大口大口喝摩卡咖啡不管用,stream,gulp,mocha.js,Stream,Gulp,Mocha.js,我正在尝试使用Mocha我的测试框架对我用Gulp构建的一些功能进行单元测试。我是单元测试新手,一直以gulp concat为例 然而,我遇到了一个问题,gulp.src在运行摩卡时找不到任何东西。我试着从它单独运行完全相同的代码,它运行得很好。与摩卡一起运行,gulp.src不会在溪流中输入任何内容 var sample = Path.join(__dirname, 'sample.html'); describe('feature', function() { it('should d

我正在尝试使用Mocha我的测试框架对我用Gulp构建的一些功能进行单元测试。我是单元测试新手,一直以gulp concat为例

然而,我遇到了一个问题,gulp.src在运行摩卡时找不到任何东西。我试着从它单独运行完全相同的代码,它运行得很好。与摩卡一起运行,gulp.src不会在溪流中输入任何内容

var sample = Path.join(__dirname, 'sample.html');
describe('feature', function() {
   it('should do something', function() {
      gulp.src(sample)
         .pipe((function() {
            var stream = through.obj(function(file, enc, callback) {
               console.log(file.path);
               this.push(file);
               callback();
            });
            return stream;
         })());
   });
});

您的测试是异步的,所以您必须告诉Mocha它是异步的,并且您必须在测试结束时告诉Mocha

通过向回调中添加一个参数来告诉Mocha它是异步的:

在适当的时候调用这个额外的done参数,告诉Mocha测试何时完成。我回到了您使用的示例,看到assert.enddone在这里用于此。因此,您的代码应编辑为:

var gulp = require("gulp");
var path = require("path");
var through = require("through2");
var assert = require('stream-assert');

var sample = path.join(__dirname, 'sample.html');
describe('feature', function() {
   it('should do something', function(done) {
       gulp.src(sample)
           .pipe((function() {
               var stream = through.obj(function(file, enc, callback) {
                   console.log(file.path);
                   this.push(file);
                   callback();
               });
               return stream;
           })())
           .pipe(assert.end(done));
   });
});

是的,这很有效!我以为我没有通过done,所以测试是同步的;我的错。多谢各位,;这让我快发疯了!不给传递给它的回调提供参数只会告诉Mocha这个测试不是异步的。但是,如果您在测试中使用的代码与您正在使用的代码一样是异步的,那么无论您是否指定参数,此代码都将保持异步。我已经详细地讲过了。
var gulp = require("gulp");
var path = require("path");
var through = require("through2");
var assert = require('stream-assert');

var sample = path.join(__dirname, 'sample.html');
describe('feature', function() {
   it('should do something', function(done) {
       gulp.src(sample)
           .pipe((function() {
               var stream = through.obj(function(file, enc, callback) {
                   console.log(file.path);
                   this.push(file);
                   callback();
               });
               return stream;
           })())
           .pipe(assert.end(done));
   });
});