2015-07-20 153 views
2

我正在写使用ES6我的项目,我使用bubel + browserify编译我js文件,到目前为止,一切都很正常,测试与摩卡和browserify

在我一饮而尽文件我加用摩卡一个测试套件,像这样:

gulp.task('buildTestsIndividually', function(done) { 
    gutil.log('buildTestsIndividually started'); 
    glob('./test/**/*.spec.js', function(err, files) { 
     gutil.log('files'+files.length); 
     if(err) done(err); 

     var tasks = files.map(function(entry) { 
      return browserify({ entries: [entry] }) 
       .transform(babelify) 
       .bundle() 
       .pipe(source(entry)) 
       .pipe(rename({ 
        extname: '.bundle.js' 
       })) 
       .pipe(gulp.dest(bundledTestsFolder)); 
      }); 
     es.merge(tasks).on('end', done); 
    }); 
    gutil.log('buildTestsIndividually completed'); 
}); 

所以我想单元测试我的一些代码,问题是,我的项目是使用一种称为froala插件,而且好像摩卡无法加载插件。

我不断收到此错误:

TypeError: this.$el.editable is not a function 
      at Array.map (native) 

请注意,我的生产ENV是复制粘贴的上述和插件,没有任何问题运行那里。

任何帮助将非常感谢!

+0

您正在导入您的应用程序,植根于您的spec文件。你是否100%确定你的spec文件在其依赖关系的某个地方有正确的'froala'?不相关,但你为什么要按照规范构建一个捆绑包? – loganfsmyth

+0

@loganfsmyth谢谢,我发现问题并提出了一些解决方法,请参阅下面的答案 –

+0

但是,为什么您需要将每个测试分别捆绑在一起?通常情况下,你会制作一个包含所有内容的包。 – loganfsmyth

回答

0

好吧,我发现这个问题: 自上一口任务分别运行的每个文件(包括所有它的依赖),但所有的睾丸是在同一个浏览器实例中运行的副作用是jQuery的加载多次并且每次都覆盖以前的jQuery实例,因此某些测试的插件被覆盖。

解决方案(3个选项):

  1. 确保每个测试具有完全相同延伸的jQuery
  2. 首先收集所有的依赖关系(有一整套)相同的插件,然后运行所有测试(可以超过分别杀死)
  3. 运行的每个测试(需要找到一种方法,用一口自动执行)

我希望这可以帮助任何人,干杯!