mardi 21 mai 2019

How To Fix Test Error While Using Delete Method in NodeJs With Mocha

I'm developing a billboard app to learn new technologies and i'm currently having problems trying to test the DELETE method of the API using Mocha.

I've been trying different approaches for it, but i couldn't find a solution yet. I'm using NodeJs and Hapi for the back-end server

const mongoose = require('mongoose')
const chai = require('chai')
const hapiServer = require('../../../index')
const expect = require('chai').expect
const should = chai.should()
chai.use(require('chai-http'))

before(async () => {
  const server = await hapiServer()
  global.url = 'http://localhost:3000'
})
after(async () => {
  await mongoose.connection.close()
  //await mongoose.connection.db.dropCollection()
})

const id = new mongoose.Types.ObjectId('5cd8a0eefc06344accd62a76')

describe('Movies API', () => {

  it('Should DELETE a single movie', async () => {
      const response = await chai.request(global.url)
        .delete('/api/movies/' + '5cd8a0eefc06344accd62a77')
      response.should.have.status(202)
  })
})

Here's the index.js

const Hapi = require('@hapi/hapi')
const Inert = require('@hapi/inert')
const Vision = require('@hapi/vision')
const HapiSwagger = require('hapi-swagger')
const mongoose = require('mongoose')
const mongo = require('./config/mongo')
const Pack = require('./package')

const start = async () => {

  const server = await new Hapi.Server({
    host: 'localhost',
    port: 3000,
  })

  // MongoDB Connection
  try{
    await mongoose
      .connect(mongo.configuration.getUri(process.env.NODE_ENV), {useNewUrlParser: true})
    console.log('MongoDB Connected...')
  } catch(err) {
    console.log(err)
  }

  const swaggerOptions = {
    info: {
      title: 'Billboard API Documentation',
      version: Pack.version,
    },
  }

  await server.register([
    Inert,
    Vision,
    {
      plugin: HapiSwagger,
      options: swaggerOptions
    }
  ]);

  try {
    await server.start()
    console.log('Server running at:', server.info.uri)
  } catch(err) {
    console.log(err)
  }

  // Register Plugins
  const moviesRoutes = require('./plugins/movies/routes')

  server.route(moviesRoutes)
}

start()

module.exports = start

So, the the rest of the api tests are similar and they work excelent. But when i try to test this method i get this response:

error: Error: cannot DELETE /api/movies/5cd8a0eefc06344accd62a77 (404)
      at Response.toError (C:\Users\lucas\billboard-backend\node_modules\superagent\lib\node\response.js:94:15)
      at ResponseBase._setStatusProperties (C:\Users\lucas\billboard-backend\node_modules\superagent\lib\response-base.js:123:16)
      at new Response (C:\Users\lucas\billboard-backend\node_modules\superagent\lib\node\response.js:41:8)
      at Test.Request._emitResponse (C:\Users\lucas\billboard-backend\node_modules\superagent\lib\node\index.js:752:20)
      at C:\Users\lucas\billboard-backend\node_modules\superagent\lib\node\index.js:916:38
      at IncomingMessage.<anonymous> (C:\Users\lucas\billboard-backend\node_modules\superagent\lib\node\parsers\json.js:19:7)
      at IncomingMessage.emit (events.js:201:15)
      at endReadableNT (_stream_readable.js:1130:12)
      at processTicksAndRejections (internal/process/task_queues.js:84:9) {
    status: 404,
    text: '{"statusCode":404,"error":"Not Found","message":"Not Found"}',
    method: 'DELETE',
    path: '/api/movies/5cd8a0eefc06344accd62a77'

Any ideas of why is this happening?

Aucun commentaire:

Enregistrer un commentaire