使用 mocha 和 browserify 进行测试

Testing with mocha and browserify

我正在使用 ES6 编写项目并使用 bubel + browserify 编译我的 js 文件,到目前为止一切正常,

在我的 gulp 文件中,我添加了一个使用 mocha 的测试套件,如下所示:

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 的插件,而且 mocha 似乎无法加载该插件。

我不断收到此错误:

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

请注意,我的生产环境是如上所述的复制粘贴,插件在那里运行没有问题。

非常感谢任何帮助!!

好的,所以我发现了问题: 由于 gulp 运行 每个文件的任务都是分开的(及其所有依赖项),但所有的睾丸都 运行 在同一个浏览器实例上,副作用是 jQuery 被加载了多次,每次它都覆盖了之前的 jQuery 实例,因此某些测试中的插件被覆盖了。

解决方案(3个选项):

  1. 确保每个测试都有完全相同的插件扩展 jquery
  2. 首先收集所有依赖项(使用gulp)然后运行所有测试(可以结束)
  3. 运行 每个单独测试(需要找到一种方法用 gulp 自动完成)

希望对大家有所帮助,干杯!