如何通过持续集成自动化业力单元测试

eme*_*his 2 continuous-integration unit-testing node.js karma-runner circleci

目前我们运行我们的业力/茉莉花单元测试一个gulp任务: gulp test

我们正试图弄清楚如何让circleci自动运行我们的测试.我尝试在circle.yml文件gulp test的test:部分下添加但是我得到了gulp: command not found.但是如果我尝试一些基本的东西,我会得到同样的错误pwd.显然,我做错了什么.

我认为使用scriptspackage.json中的属性可以实现相同的结果,因为circleci会自动运行,但我不知道该怎么做.

这是我们的circle.yml文件......

dependencies:
  override:
    - echo PHP rules

test:
  override:
    - gulp test #this doesnt work!

deployment:
  development:
    branch: dev
    heroku:
      appname: ourapp
Run Code Online (Sandbox Code Playgroud)

这是package.json ......

{
  "name": "ourapp",
  "private": true,
  "description": "An app",
  "main": "index.js",
  "dependencies": {
    "gulp": "~3.8.5"
  },
  "devDependencies": {
    "karma": "~0.12.31",
    "karma-chrome-launcher": "~0.1.7",
    "jasmine-core": "~2.2.0",
    "karma-jasmine": "~0.3.5",
    "karma-firefox-launcher": "~0.1.4",
    "karma-ie-launcher": "~0.1.5",
    "karma-opera-launcher": "~0.1.0",
    "karma-phantomjs-launcher": "~0.1.4",
    "gulp": "~3.8.10",
    "gulp-karma": "0.0.4",
    "karma-coverage": "~0.2.7"
  },
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "The A Team"
}
Run Code Online (Sandbox Code Playgroud)

为了防止它有用,这是gulp任务......

gulp.task('test', function(){
  return gulp.src(testFiles)
    .pipe(karma({
      configFile: 'karma.conf.js',
      action: 'run' //change to watch if you want to auto-run 
    }))
    .on('error', function(err){
      throw err;
    })
});
Run Code Online (Sandbox Code Playgroud)

为了保持一致性,我认为最好的是如果我们可以让circleci运行gulp任务,但是如果我们必须karma ...手动运行也没关系.

eme*_*his 5

这对我有用:

dependencies:
  pre:
    - npm install -g gulp

test:
  override:
    - gulp test

machine:
  php:
    version: 5.6.2
Run Code Online (Sandbox Code Playgroud)

这npm install -g gulp对我来说是个缺失的部分.Circleci将检测package.json并npm install自动运行,但我需要全局pre:安装它才能使我的gulp任务正常工作.

还值得一提的是,circleci通过检测退出代码自动知道业力/茉莉花测试是否通过或失败.所以这只是按原样运作.