2017-02-13 13 views
2

Я создаю приложение и как часть его, у меня есть REST API на Express, для которого я хотел бы написать интеграционные тесты. Я использую «mocha» и «chai-http» для этого, и все это отлично работает, когда я добавляю аутентификацию. Так что в тесте:Как протестировать экспресс-REST API с помощью паспорта 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 Да, я добавил ответ. –

ответ

1

Единственное решение этой проблемы я нашел, чтобы использовать макет стратегии аутентификации паспорта для тестирования, как этот: https://www.npmjs.com/package/passport-mocked и использовать вместо вашей стратегии, когда вы находитесь в среде тестирования.

 Смежные вопросы

  • Нет связанных вопросов^_^