[Unit testing + Jest] Use jest-in-case to Reduce Duplication and Improve Test Titles

Jest has a test-generation feature built-in called test.each which is great, but I don’t particularly like it’s API. Instead, we’re going to use an open source project called jest-in-case which gives us a really nice API for generated tests and improved error messages. Let’s try that library out for our isPasswordAllowed tests here.

 

// From
import {isPasswordAllowed} from '../auth'

describe('isPasswordAllowed', () => {
  const allowedPwds = ['!aBc123']
  const disallowedPwds = {
    'too short': 'a2c!',
    'no alphabet characters': '123456',
    'no numbers': 'ABCdef!',
    'no uppercase letters': 'abc123!',
    'no lowercase letters': 'ABC123!',
    'no non-alphanumeric characters': 'ABCdef123',
  }
  allowedPwds.forEach((pwd) => {
    test(`allow ${pwd}`, () => {
      expect(isPasswordAllowed(pwd)).toBeTruthy()
    })
  })
  Object.entries(disallowedPwds).forEach(([key, value]) => {
    test(`disallow - ${key}: ${value}`, () => {
      expect(isPasswordAllowed(value)).toBeFalsy()
    })
  })
})

 

to:

import cases from 'jest-in-case'
import {isPasswordAllowed} from '../auth'

cases(
  'isPasswordAllowed: valid passwords',
  ({password}) => {
    expect(isPasswordAllowed(password)).toBe(true)
  },
  {
    'valid password': {
      password: '!aBc123',
    },
  },
)

cases(
  'isPasswordAllowed: invalid passwords',
  ({password}) => {
    expect(isPasswordAllowed(password)).toBe(false)
  },
  {
    'too short': {
      password: 'a2c!',
    },
    'no letters': {
      password: '123456!',
    },
    'no numbers': {
      password: 'ABCdef!',
    },
    'no uppercase letters': {
      password: 'abc123!',
    },
    'no lowercase letters': {
      password: 'ABC123!',
    },
    'no non-alphanumeric characters': {
      password: 'ABCdef123',
    },
  },
)

(Not necessary)

 

[Unit testing + Jest] Use jest-in-case to Reduce Duplication and Improve Test Titles

上一篇:[Unit Testing + Jest + Node server] Testing a Node middleware with Jest


下一篇:vue3 jest+element-plus若报错