<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://logicwiki.co.uk/index.php?action=history&amp;feed=atom&amp;title=Integration_Test_in_Node</id>
		<title>Integration Test in Node - Revision history</title>
		<link rel="self" type="application/atom+xml" href="http://logicwiki.co.uk/index.php?action=history&amp;feed=atom&amp;title=Integration_Test_in_Node"/>
		<link rel="alternate" type="text/html" href="http://logicwiki.co.uk/index.php?title=Integration_Test_in_Node&amp;action=history"/>
		<updated>2026-10-29T00:38:07Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.26.2</generator>

	<entry>
		<id>http://logicwiki.co.uk/index.php?title=Integration_Test_in_Node&amp;diff=1672&amp;oldid=prev</id>
		<title>AliIybar: Created page with &quot;Category:Node.js Category:Tests  == Installation ==   npm i supertest --save-dev == Setup == in index.js change the line like below  const server = app.listen(port, ()...&quot;</title>
		<link rel="alternate" type="text/html" href="http://logicwiki.co.uk/index.php?title=Integration_Test_in_Node&amp;diff=1672&amp;oldid=prev"/>
				<updated>2018-11-09T15:26:45Z</updated>
		
		<summary type="html">&lt;p&gt;Created page with &amp;quot;&lt;a href=&quot;/Category:Node.js&quot; title=&quot;Category:Node.js&quot;&gt;Category:Node.js&lt;/a&gt; &lt;a href=&quot;/index.php?title=Category:Tests&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Category:Tests (page does not exist)&quot;&gt;Category:Tests&lt;/a&gt;  == Installation ==   npm i supertest --save-dev == Setup == in index.js change the line like below  const server = app.listen(port, ()...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[Category:Node.js]]&lt;br /&gt;
[[Category:Tests]]&lt;br /&gt;
&lt;br /&gt;
== Installation == &lt;br /&gt;
 npm i supertest --save-dev&lt;br /&gt;
== Setup ==&lt;br /&gt;
in index.js change the line like below&lt;br /&gt;
 const server = app.listen(port, () =&amp;gt; winston.info(`Listening on port ${port}...`));&lt;br /&gt;
 module.exports = server;&lt;br /&gt;
in Test folder create a folder named &amp;quot;integration&amp;quot; and create a test file &amp;quot;genre.test.js&amp;quot;&lt;br /&gt;
=== genre.test.js ===&lt;br /&gt;
&amp;lt;pre class=&amp;quot;brush:js;&amp;quot;&amp;gt;&lt;br /&gt;
const request = require('supertest');&lt;br /&gt;
const {Genre} = require('../../models/genre');&lt;br /&gt;
const {User} = require('../../models/user');&lt;br /&gt;
const mongoose = require('mongoose');&lt;br /&gt;
&lt;br /&gt;
let server;&lt;br /&gt;
&lt;br /&gt;
describe('/api/genres', () =&amp;gt; {&lt;br /&gt;
  beforeEach(() =&amp;gt; { server = require('../../index'); })&lt;br /&gt;
  afterEach(async () =&amp;gt; { &lt;br /&gt;
    server.close(); &lt;br /&gt;
    await Genre.remove({});&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
  describe('GET /', () =&amp;gt; {&lt;br /&gt;
    it('should return all genres', async () =&amp;gt; {&lt;br /&gt;
      const genres = [&lt;br /&gt;
        { name: 'genre1' },&lt;br /&gt;
        { name: 'genre2' },&lt;br /&gt;
      ];&lt;br /&gt;
      &lt;br /&gt;
      await Genre.collection.insertMany(genres);&lt;br /&gt;
&lt;br /&gt;
      const res = await request(server).get('/api/genres');&lt;br /&gt;
      &lt;br /&gt;
      expect(res.status).toBe(200);&lt;br /&gt;
      expect(res.body.length).toBe(2);&lt;br /&gt;
      expect(res.body.some(g =&amp;gt; g.name === 'genre1')).toBeTruthy();&lt;br /&gt;
      expect(res.body.some(g =&amp;gt; g.name === 'genre2')).toBeTruthy();&lt;br /&gt;
    });&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
  describe('GET /:id', () =&amp;gt; {&lt;br /&gt;
    it('should return a genre if valid id is passed', async () =&amp;gt; {&lt;br /&gt;
      const genre = new Genre({ name: 'genre1' });&lt;br /&gt;
      await genre.save();&lt;br /&gt;
&lt;br /&gt;
      const res = await request(server).get('/api/genres/' + genre._id);&lt;br /&gt;
&lt;br /&gt;
      expect(res.status).toBe(200);&lt;br /&gt;
      expect(res.body).toHaveProperty('name', genre.name);     &lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    it('should return 404 if invalid id is passed', async () =&amp;gt; {&lt;br /&gt;
      const res = await request(server).get('/api/genres/1');&lt;br /&gt;
&lt;br /&gt;
      expect(res.status).toBe(404);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    it('should return 404 if no genre with the given id exists', async () =&amp;gt; {&lt;br /&gt;
      const id = mongoose.Types.ObjectId();&lt;br /&gt;
      const res = await request(server).get('/api/genres/' + id);&lt;br /&gt;
&lt;br /&gt;
      expect(res.status).toBe(404);&lt;br /&gt;
    });&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
  describe('POST /', () =&amp;gt; {&lt;br /&gt;
&lt;br /&gt;
    // Define the happy path, and then in each test, we change &lt;br /&gt;
    // one parameter that clearly aligns with the name of the &lt;br /&gt;
    // test. &lt;br /&gt;
    let token; &lt;br /&gt;
    let name; &lt;br /&gt;
&lt;br /&gt;
    const exec = async () =&amp;gt; {&lt;br /&gt;
      return await request(server)&lt;br /&gt;
        .post('/api/genres')&lt;br /&gt;
        .set('x-auth-token', token)&lt;br /&gt;
        .send({ name });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    beforeEach(() =&amp;gt; {&lt;br /&gt;
      token = new User().generateAuthToken();      &lt;br /&gt;
      name = 'genre1'; &lt;br /&gt;
    })&lt;br /&gt;
&lt;br /&gt;
    it('should return 401 if client is not logged in', async () =&amp;gt; {&lt;br /&gt;
      token = ''; &lt;br /&gt;
&lt;br /&gt;
      const res = await exec();&lt;br /&gt;
&lt;br /&gt;
      expect(res.status).toBe(401);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    it('should return 400 if genre is less than 5 characters', async () =&amp;gt; {&lt;br /&gt;
      name = '1234'; &lt;br /&gt;
      &lt;br /&gt;
      const res = await exec();&lt;br /&gt;
&lt;br /&gt;
      expect(res.status).toBe(400);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    it('should return 400 if genre is more than 50 characters', async () =&amp;gt; {&lt;br /&gt;
      name = new Array(52).join('a');&lt;br /&gt;
&lt;br /&gt;
      const res = await exec();&lt;br /&gt;
&lt;br /&gt;
      expect(res.status).toBe(400);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    it('should save the genre if it is valid', async () =&amp;gt; {&lt;br /&gt;
      await exec();&lt;br /&gt;
&lt;br /&gt;
      const genre = await Genre.find({ name: 'genre1' });&lt;br /&gt;
&lt;br /&gt;
      expect(genre).not.toBeNull();&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    it('should return the genre if it is valid', async () =&amp;gt; {&lt;br /&gt;
      const res = await exec();&lt;br /&gt;
&lt;br /&gt;
      expect(res.body).toHaveProperty('_id');&lt;br /&gt;
      expect(res.body).toHaveProperty('name', 'genre1');&lt;br /&gt;
    });&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
  describe('PUT /:id', () =&amp;gt; {&lt;br /&gt;
    let token; &lt;br /&gt;
    let newName; &lt;br /&gt;
    let genre; &lt;br /&gt;
    let id; &lt;br /&gt;
&lt;br /&gt;
    const exec = async () =&amp;gt; {&lt;br /&gt;
      return await request(server)&lt;br /&gt;
        .put('/api/genres/' + id)&lt;br /&gt;
        .set('x-auth-token', token)&lt;br /&gt;
        .send({ name: newName });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    beforeEach(async () =&amp;gt; {&lt;br /&gt;
      // Before each test we need to create a genre and &lt;br /&gt;
      // put it in the database.      &lt;br /&gt;
      genre = new Genre({ name: 'genre1' });&lt;br /&gt;
      await genre.save();&lt;br /&gt;
      &lt;br /&gt;
      token = new User().generateAuthToken();     &lt;br /&gt;
      id = genre._id; &lt;br /&gt;
      newName = 'updatedName'; &lt;br /&gt;
    })&lt;br /&gt;
&lt;br /&gt;
    it('should return 401 if client is not logged in', async () =&amp;gt; {&lt;br /&gt;
      token = ''; &lt;br /&gt;
&lt;br /&gt;
      const res = await exec();&lt;br /&gt;
&lt;br /&gt;
      expect(res.status).toBe(401);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    it('should return 400 if genre is less than 5 characters', async () =&amp;gt; {&lt;br /&gt;
      newName = '1234'; &lt;br /&gt;
      &lt;br /&gt;
      const res = await exec();&lt;br /&gt;
&lt;br /&gt;
      expect(res.status).toBe(400);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    it('should return 400 if genre is more than 50 characters', async () =&amp;gt; {&lt;br /&gt;
      newName = new Array(52).join('a');&lt;br /&gt;
&lt;br /&gt;
      const res = await exec();&lt;br /&gt;
&lt;br /&gt;
      expect(res.status).toBe(400);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    it('should return 404 if id is invalid', async () =&amp;gt; {&lt;br /&gt;
      id = 1;&lt;br /&gt;
&lt;br /&gt;
      const res = await exec();&lt;br /&gt;
&lt;br /&gt;
      expect(res.status).toBe(404);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    it('should return 404 if genre with the given id was not found', async () =&amp;gt; {&lt;br /&gt;
      id = mongoose.Types.ObjectId();&lt;br /&gt;
&lt;br /&gt;
      const res = await exec();&lt;br /&gt;
&lt;br /&gt;
      expect(res.status).toBe(404);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    it('should update the genre if input is valid', async () =&amp;gt; {&lt;br /&gt;
      await exec();&lt;br /&gt;
&lt;br /&gt;
      const updatedGenre = await Genre.findById(genre._id);&lt;br /&gt;
&lt;br /&gt;
      expect(updatedGenre.name).toBe(newName);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    it('should return the updated genre if it is valid', async () =&amp;gt; {&lt;br /&gt;
      const res = await exec();&lt;br /&gt;
&lt;br /&gt;
      expect(res.body).toHaveProperty('_id');&lt;br /&gt;
      expect(res.body).toHaveProperty('name', newName);&lt;br /&gt;
    });&lt;br /&gt;
  });  &lt;br /&gt;
&lt;br /&gt;
  describe('DELETE /:id', () =&amp;gt; {&lt;br /&gt;
    let token; &lt;br /&gt;
    let genre; &lt;br /&gt;
    let id; &lt;br /&gt;
&lt;br /&gt;
    const exec = async () =&amp;gt; {&lt;br /&gt;
      return await request(server)&lt;br /&gt;
        .delete('/api/genres/' + id)&lt;br /&gt;
        .set('x-auth-token', token)&lt;br /&gt;
        .send();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    beforeEach(async () =&amp;gt; {&lt;br /&gt;
      // Before each test we need to create a genre and &lt;br /&gt;
      // put it in the database.      &lt;br /&gt;
      genre = new Genre({ name: 'genre1' });&lt;br /&gt;
      await genre.save();&lt;br /&gt;
      &lt;br /&gt;
      id = genre._id; &lt;br /&gt;
      token = new User({ isAdmin: true }).generateAuthToken();     &lt;br /&gt;
    })&lt;br /&gt;
&lt;br /&gt;
    it('should return 401 if client is not logged in', async () =&amp;gt; {&lt;br /&gt;
      token = ''; &lt;br /&gt;
&lt;br /&gt;
      const res = await exec();&lt;br /&gt;
&lt;br /&gt;
      expect(res.status).toBe(401);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    it('should return 403 if the user is not an admin', async () =&amp;gt; {&lt;br /&gt;
      token = new User({ isAdmin: false }).generateAuthToken(); &lt;br /&gt;
&lt;br /&gt;
      const res = await exec();&lt;br /&gt;
&lt;br /&gt;
      expect(res.status).toBe(403);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    it('should return 404 if id is invalid', async () =&amp;gt; {&lt;br /&gt;
      id = 1; &lt;br /&gt;
      &lt;br /&gt;
      const res = await exec();&lt;br /&gt;
&lt;br /&gt;
      expect(res.status).toBe(404);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    it('should return 404 if no genre with the given id was found', async () =&amp;gt; {&lt;br /&gt;
      id = mongoose.Types.ObjectId();&lt;br /&gt;
&lt;br /&gt;
      const res = await exec();&lt;br /&gt;
&lt;br /&gt;
      expect(res.status).toBe(404);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    it('should delete the genre if input is valid', async () =&amp;gt; {&lt;br /&gt;
      await exec();&lt;br /&gt;
&lt;br /&gt;
      const genreInDb = await Genre.findById(id);&lt;br /&gt;
&lt;br /&gt;
      expect(genreInDb).toBeNull();&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    it('should return the removed genre', async () =&amp;gt; {&lt;br /&gt;
      const res = await exec();&lt;br /&gt;
&lt;br /&gt;
      expect(res.body).toHaveProperty('_id', genre._id.toHexString());&lt;br /&gt;
      expect(res.body).toHaveProperty('name', genre.name);&lt;br /&gt;
    });&lt;br /&gt;
  });  &lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== auth.test.js ===&lt;br /&gt;
&amp;lt;pre class=&amp;quot;brush:js;&amp;quot;&amp;gt;&lt;br /&gt;
const {User} = require('../../models/user');&lt;br /&gt;
const {Genre} = require('../../models/genre');&lt;br /&gt;
const request = require('supertest');&lt;br /&gt;
&lt;br /&gt;
describe('auth middleware', () =&amp;gt; {&lt;br /&gt;
  beforeEach(() =&amp;gt; { server = require('../../index'); })&lt;br /&gt;
  afterEach(async () =&amp;gt; { &lt;br /&gt;
    await Genre.remove({});&lt;br /&gt;
    server.close(); &lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
  let token; &lt;br /&gt;
&lt;br /&gt;
  const exec = () =&amp;gt; {&lt;br /&gt;
    return request(server)&lt;br /&gt;
      .post('/api/genres')&lt;br /&gt;
      .set('x-auth-token', token)&lt;br /&gt;
      .send({ name: 'genre1' });&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  beforeEach(() =&amp;gt; {&lt;br /&gt;
    token = new User().generateAuthToken();&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
  it('should return 401 if no token is provided', async () =&amp;gt; {&lt;br /&gt;
    token = ''; &lt;br /&gt;
&lt;br /&gt;
    const res = await exec();&lt;br /&gt;
&lt;br /&gt;
    expect(res.status).toBe(401);&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
  it('should return 400 if token is invalid', async () =&amp;gt; {&lt;br /&gt;
    token = 'a'; &lt;br /&gt;
&lt;br /&gt;
    const res = await exec();&lt;br /&gt;
&lt;br /&gt;
    expect(res.status).toBe(400);&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
  it('should return 200 if token is valid', async () =&amp;gt; {&lt;br /&gt;
    const res = await exec();&lt;br /&gt;
&lt;br /&gt;
    expect(res.status).toBe(200);&lt;br /&gt;
  });&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== Files ==&lt;br /&gt;
[http://logicwiki.co.uk/Files/IntegrationTest.zip http://logicwiki.co.uk/Files/IntegrationTest.zip]&lt;/div&gt;</summary>
		<author><name>AliIybar</name></author>	</entry>

	</feed>