Sawtaytoes
11/24/2018 - 3:36 PM

Simple AJAX Testing

Super simple AJAX unit tests. Does the fetch function handle a success and a failure as we expect?

const colorSets = require('./colorSets')
const fetchMock = require('fetch-mock')
const test = require('ava')

require('../directory')

const createScaryLightFlasher = require('./createScaryLightFlasher')

const { Response } = fetchMock.config

test('Successful HTTP Response', t => {
  const expectedResponse = (
    new Response(
      JSON.stringify({}),
      { status: 202 },
    )
  )

  const mockFetchPromise = (
    createScaryLightFlasher(
      fetchMock
      .sandbox()
      .mock(
        '*',
        expectedResponse,
      )
    )(
      colorSets,
    )
  )

  return (
    mockFetchPromise
    .then(response => {
      t.is(
        response.status,
        202,
        "Response status is 202."
      )

      t.is(
        response,
        expectedResponse,
        "Response value matches expected."
      )

      return response
    })
    .then(response => (
      response
      .json()
    ))
  )
})

test('Failing HTTP Response', t => {
  const expectedResponse = (
    new Response(
      '',
      { status: 400 },
    )
  )

  const mockFetchPromise = (
    createScaryLightFlasher(
      fetchMock
      .sandbox()
      .mock(
        '*',
        expectedResponse,
      )
    )(
      colorSets,
    )
  )

  return (
    mockFetchPromise
    .then(response => {
      t.is(
        response.status,
        400,
        "Response status is 400."
      )

      t.is(
        response,
        expectedResponse,
        "Response value matches expected."
      )

      return response
    })
  )
})