2017-02-13 33 views
2

我正在構建一個應用程序,並且作爲它的一部分,我在Express上有一個REST API,我希望爲其編寫集成測試。我使用「mocha」和「chai-http」來執行此操作,除了添加身份驗證之外,這一切都運行良好。因此,在類似的測試中:如何使用Passport測試Express REST API使用mocha進行Google OAuth身份驗證?

process.env.NODE_ENV = 'development' 

let chai = require('chai') 
let chaiHttp = require('chai-http') 
let should = chai.should() 
var server = require('../app.js') 
var schemas = require('../schemas') 
var Snippet = schemas.Snippet 
chai.use(require('chai-passport-strategy')) 

chai.use(chaiHttp) 

describe('Snippet',() => { 
    beforeEach((done) => { 
    Snippet.destroy({ 
     where: {} 
    }).then(function() { 
     done() 
    }).catch(function (e) { 
     done(e) 
    }) 
    }) 
    describe('snippet create',() => { 
    it('it should store a snippet ', (done) => { 
     let snippet = { 
     title: 'Test', 
     description: 'Mock description', 
     snippet: 'Mock body', 
     keywords: 'Test key, words;input', 
     type: 'sql', 
     rating: 1, 
     approved: false 
     } 
     chai.request(server) 
     .post('/api/submitSnippet/') 
     .send(snippet) 
     .end((err, res) => { 
      if (err) console.log(err) 
      res.should.have.status(200) 
      res.body.should.be.a('object') 
      res.body.should.have.property('title') 
      res.body.should.have.property('description') 
      res.body.should.have.property('snippet') 
      res.body.should.have.property('keywords') 
      res.body.should.have.property('type') 
      res.body.should.have.property('rating') 
      res.body.should.have.property('approved') 
      res.body.title.should.equal('Test') 
      res.body.description.should.equal('Mock description') 
      res.body.snippet.should.equal('Mock body') 
      res.body.keywords.should.equal(['Test', 'key', 'words', 'input']) 
      res.body.type.should.equal('sql') 
      res.body.rating.should.equal(1) 
      res.body.approved.should.equal(false) 
      done() 
     }) 
    }) 
    }) 
}) 

我會得到一個錯誤,因爲我的請求不會來自已驗證的會話。我正在使用Google OAuth策略的「護照」,因此我無法向登錄頁面發送發佈請求,也無法想到登錄或驗證我的請求的方式。 (數據庫操作是Sequelize)。我如何測試應用程序中的API操作?有沒有標準的方法?

+0

自從創建這篇文章以來,您是否有解決方案的運氣? – vapurrmaid

+1

@vapurrmaid是的,我添加了一個答案。 –

回答

相關問題