2017-05-26 81 views
1

我正在編寫用戶在登錄後才能訪問的頁面的單元測試。我有以下代碼來測試用戶是否成功登錄與否:如何爲用戶需要登錄的網頁編寫單元測試

describe('login', function() { 
    this.timeout(20000); 
    it('should login with correct password', function (done) { 
     this.timeout(20000); 
     setTimeout(done, 20000); 
     request.post('/login') 
      .send({ 
       username:"[email protected]", 
       password:"admin1" 
      }) 
      .expect('Location','/profile') 
      .end(done); 
     }); 
    }); 

的測試工作,然後我試圖添加以下代碼:

describe('secret page',function(){ 
    it('should get secret',function(done){ 
     request.get('/secret') 
      .expect('Location','/secret') 
      .end(done); 
    }); 
}); 

我希望用戶應該能夠得到祕密頁面,但我收到一個錯誤:

GET /secret 302 0.424 ms - 28 
Error: expected "Location" of "/secret", got "/login" 
at Test._assertHeader (\node_modules\supertest\lib\test.js:247:12) 
at Test._assertFunction (\node_modules\supertest\lib\test.js:281:11) 
at Test.assert (\node_modules\supertest\lib\test.js:171:18) 
at Server.assert (\node_modules\supertest\lib\test.js:131:12) 
at emitCloseNT (net.js:1554:8) 
at _combinedTickCallback (internal/process/next_tick.js:77:11) 
at process._tickCallback (internal/process/next_tick.js:104:9) 

我試圖把第二個「it」函數放到第一個描述塊中,我得到了同樣的錯誤。但是當網站正在運行時,用戶可以正確訪問祕密頁面,而不必返回登錄頁面。

+0

你能發佈整個代碼嗎?請求做了什麼?你嘲笑什麼? – Ioan

回答

0

您可以嘗試調查授權是如何工作的。也許你可以從標題中獲取一些標記並稍後使用,只需將正確的標題附加到請求中。

另一種選擇可能是使用摩卡的beforeEach()掛鉤。