2017-01-30 99 views
0

我檢查了一些NPM庫以測試網頁或網絡服務。但他們都期望服務器已經在運行。因爲我想自動化功能測試,我怎麼能安裝NPM包以這樣的方式在node.js中自動化功能測試

  1. 它可以啓動服務器
  2. 測試應用程序
  3. 停止服務器

使我可以在本地進行測試,也可以在線上CI工具(如travis-ci或circleci)進行測試。

情況1:web服務

我寫開始的NodeJS HTTP(S)服務器NPM包。它可以從命令行$stubmatic開始。目前,我用兩種方法來測試它,

  1. 手冊:我手動從命令行啓動它。然後運行測試。
  2. 自動:我使用exec模塊來運行一個unix命令,它可以啓動應用程序並運行pkill命令來終止應用程序。但對於這種自動化,我的應用程序需要安裝在測試機器上。

案例2:網站

我已創建一個NPM包:fast-xml-parser和回購中創建的演示頁,這樣我可以在瀏覽器中進行測試。爲了測試演示頁面,我目前使用http-server npm軟件包手動啓動本地服務器。測試應用程序。

有什麼可以更好的方式來編寫節點js應用程序的功能測試自動化?

注:

  • 我從來沒有使用過任務運動員一樣一飲而盡或呼嚕聲。所以我不確定他們能否在這種情況下提供幫助。
  • 在情況1中,我的應用程序啓動節點js本機HTTP服務器。目前我沒有使用任何第三方應用程序,如express
+0

我發現情況2.尋找案例1,現在的解決方案。 –

回答

0

案例1:Webservice的

問題1 作爲server.close()的NodeJS不工作。我複製粘貼這個片段在每個測試文件,這是開始我的web服務。

try{ 
    server.setup(options); 
    server.start(); 
}catch(err){ 
    console.log(err); 
} 

所有測試完成後,服務器停止。

**問題2 我錯誤地使用了chai-http。這是完整的工作解決方案。

//Need to be placed before importing chai and chai-http 
if (!global.Promise) { 
    global.Promise = require('q'); 
} 

var server = require('.././lib/server'); 
var chai = require('chai') 
    , chaiHttp = require('chai-http'); 

chai.use(chaiHttp); 

try{ 
    server.setup(someoptions); 
    server.start(); 
}catch(err){ 
    console.log(err); 
} 

describe('FT', function() { 

    describe('scenario::', function() { 

    it('responds to POST', function (done) { 
     chai.request("http://localhost:9999") 
      .post('/someurl') 
      .then(res => { 
       expect(res.status).toBe(200); 
       //console.log(res.text); 
       done(); 
      }).catch(err => { 
       console.log(err); 
       done(); 
      }); 
    }); 

}); 

案例二:網站這是很簡單的。

  • 我用http-server啓動服務器,以便我的html文件可以被訪問。
  • 我用zombie js進行瀏覽器測試。 (有許多可用於瀏覽器測試許多其他選項)

下面是代碼

process.env.NODE_ENV = 'test'; 

const Browser = require('zombie'); 
const httpServer = require('http-server'); 

describe("DemoApp", function() { 
    var browser = new Browser({site: 'http://localhost:8080'}); 
    var server = httpServer.createServer(); 
    server.listen(8080); 

    beforeEach(function(done){ 
     browser.visit('/', done); 
    }); 

    describe("Parse XML", function() { 

    it("should parse xml to json", function(done) { 
     browser.pressButton('#submit'); 
     browser.assert.text('#result', 'some result text'); 
     done(); 
    }); 
    }); 

    afterEach(function(){ 
     server.close(); 
    }) 
}); 
0

這個問題提到了一個新的Docker容器系統,可以在本地複製Travis。這可能是一個辦法:How to run travis-ci locally

+0

你能否多解釋一下,它如何幫助編寫/運行FT? –