簡體   English   中英

npm run script:node server.js && mocha test

[英]npm run script: node server.js && mocha test

我的用例非常簡單:

首先,我想運行node server.js (啟動我的Node.js應用程序) - 並且在Node啟動后 - 我想通過執行npm run test來運行mocha test (在以前的server.js提供的API上運行一些測試)。

腳本: "test": "NODE_ENV=development node server.js && mocha test"

節點啟動,但遺憾的是似乎沒有執行mocha test

在此輸入圖像描述

那么如何在node server.js之后執行mocha test呢?

您遇到這種情況的原因是因為node server.js一直運行直到被殺死(Ctrl + C)或發生致命的未處理異常。 由於node進程一直運行mocha test永遠不會執行。

一種方法是使用gulp作為任務運行器並利用實現gulp-nodemongulp-nodemon gulp-mocha 如果您之前從未使用過Gulp或者對任務運行者不熟悉,我建議您事先閱讀文檔,以了解它是如何工作的。

將下面的gulpfile.js添加到您的應用程序中(根據需要調整一些設置)並使用下面的test腳本修改package.json腳本,這應該可以解決您的問題。

gulpfile.js

var gulp = require('gulp');
var mocha = require('gulp-mocha');
var nodemon = require('gulp-nodemon');

gulp.task('nodemon', (cb) => {
  let started = false;

  return nodemon({
    script: 'server.js'
  })
    .on('start', () => {
      if (!started) {
        started = true;
        return cb();
      }
    })
    .on('restart', () => {
      console.log('restarting');
    });

});

gulp.task('test', ['nodemon'], function() {
  return gulp.src('./test/*.js')
    .pipe(mocha({reporter: 'spec' }))  
    once('error', function() {
        process.exit(1);
    })
    .once('end', function() {
      process.exit();
    });
});

package.json scripts

{
  "scripts": {
    "test": "NODE_ENV=development gulp test"
  }
}

Supertest Alternative

一個更優雅的解決方案,在我看來更好的選擇,就是重寫你的測試以使用supertest 基本上你用supertest做的是將你的Express實例傳遞給它,並使用supertest包對它運行斷言測試。

var mocha = require('mocha');
var request = require('supertest');
var server = require('server');

describe('test server.js', function() {

    it('test GET /', function(done) {
        request(server)
            .get('/')
            .expect(200, done);
    });

});

將此代碼添加到您的測試用例中

after(function (done) {
        done();
       process.exit(1);
 })

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM