3

我正在开发一个使用咖啡脚本进行开发和测试的项目。我在带有 mocha 的 --watch 标志的节点中运行测试,这样我可以在我进行更改时自动运行测试。

虽然这在某种程度上有效,但只有 ./test/test.*.coffee 文件在保存某些内容时会被重新编译。这是我的目录结构:

/src/coffee
-- # Dev files go here
/test/
-- # Test files go here

mocha watcher 响应 /src 和 /test 目录中的文件更改,但只要重新编译 /test 目录中的文件,连续测试就有点无聊。如果我退出并重新启动观察程序,源文件也会重新编译。如何让 mocha 让咖啡编译器在每次运行时在测试文件中列为依赖项的开发文件运行?

4

2 回答 2

6

这是我使用 grunt.js 的答案

你将不得不安装 grunt 和一些额外的包。

npm install grunt grunt-contrib-coffee grunt-simple-mocha grunt-contrib-watch

并编写这个 grunt.js 文件:

module.exports = function(grunt) {

  grunt.loadNpmTasks('grunt-contrib-coffee');
  grunt.loadNpmTasks('grunt-simple-mocha');
  grunt.loadNpmTasks('grunt-contrib-watch');

  grunt.initConfig({
    coffee:{
      dev:{
        files:{
          'src/*.js':'src/coffee/*.coffee',
        }
      },
      test:{
        files:{          
          'test/test.*.js':'test/test.*.coffee'
        }
      }
    },
    simplemocha:{
      dev:{
        src:"test/test.js",
        options:{
          reporter: 'spec',
          slow: 200,
          timeout: 1000
        }
      }
    },
    watch:{
      all:{
        files:['src/coffee/*', 'test/*.coffee'],
        tasks:['buildDev', 'buildTest', 'test']
      }
    }
  });

  grunt.registerTask('test', 'simplemocha:dev');
  grunt.registerTask('buildDev', 'coffee:dev');
  grunt.registerTask('buildTest', 'coffee:test');
  grunt.registerTask('watch', ['buildDev', 'buildTest', 'test', 'watch:all']);

};

注意:我没有关于如何构建/运行测试的一些细节,所以你当然必须添加 ;)

然后运行 ​​grunt watch 任务:

$>grunt watch
于 2012-12-03T12:57:16.910 回答
3

使用带有面粉的 Cakefile :

flour = require 'flour'
cp    = require 'child_process'

task 'build', ->
    bundle 'src/coffee/*.coffee', 'lib/project.js'

task 'watch', ->
    invoke 'build'
    watch 'src/coffee/', -> invoke 'build'

task 'test', ->
    invoke 'watch'
    cp.spawn 'mocha --watch', [], {stdio: 'inherit'}

摩卡已经看test/文件夹了,所以你只需要看src/

于 2012-12-04T04:24:47.287 回答