簡體   English   中英

在Cloud9上使用Supertest測試Node Express應用

[英]Testing node express app with supertest on cloud9

我無法使用supertest在cloud9上測試Express應用程序:即使是基本測試也會拋出ECONNREFUSED。

重現步驟 :

  • 創建一個新的nodejs工作區
  • npm install express超級測試
  • 創建一個包含以下代碼的文件“ fails.js”:

     // Code from supertest page var request = require('supertest') , express = require('express'); var app = express(); app.get('/user', function(req, res){ res.send(201, { name: 'tobi' }); }); request(app) .get('/user') .expect('Content-Type', /json/) .expect('Content-Length', '20') .expect(201) .end(function(err, res){ if (err) throw err; }); 

然后在終端上啟動節點fail.js:錯誤:連接ECONNREFUSED

jmbarbier@test:~/606588 $ node fails.js
/var/lib/stickshift/522b68364382ecb9de0000ac/app-root/data/606588/fails.js:16
if (err) throw err
               ^
Error: connect ECONNREFUSED
at errnoException (net.js:906:11)
at Object.afterConnect [as oncomplete] (net.js:897:19)

我不知道發生了什么...

========編輯

感謝接受的解決方案,這是使用mocha在cloud9或任何可用的限制IP /端口的環境中測試Express應用程序的代碼:(works.js)

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

before(function(done) {
    var express = require('express');
    var app = express();
    app.get('/user', function(req, res){
      res.send(201, { name: 'tobi' });
    });
    server = app.listen(process.env.PORT, process.env.IP, done);
});

after(function () {
    server.close()
})

describe("Testing /user", function() {
    it("Should return data", function(done) {
        request = request('http://' + process.env.IP + ':' + process.env.PORT);

        request.get('/user')
          .expect('Content-Type', /json/)
          .expect('Content-Length', '20')
          .expect(201)
          .end(function(err, res){
            if (err) throw err;
            done()
          });

    })


})

然后mocha works.js ...

快速瀏覽了有關Cloud9的超級測試代碼和模糊知識之后,您顯示的代碼似乎迫使Express應用程序選擇一個隨機端口(如果應用程序尚未在監聽)並進行監聽。

這對Cloud9不起作用,因為據我所知,分配的偵聽地址是回送地址,並被代理到您的項目頁面。 而是使用以下代碼:

var request = require('supertest')
var express = require('express');
var app = express();

app.get('/user', function(req, res) {
  res.send(201, { name: 'tobi' });
});

app.listen(process.env.PORT, process.env.IP);

這樣,您可以為Express應用程序分配適當的地址和端口,而supertest不會為其分配隨機端口。 然后像這樣使用supertest:

request = request('http://' + process.env.IP + ':' + process.env.PORT);
request.get('/user')
  .expect('Content-Type', /json/)
  .expect('Content-Length', '20')
  .expect(201)
  .end(function(err, res) {
    if (err) throw err;
  });

暫無
暫無

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

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