__tests__/worker/back.worker.test.js

Summary

Maintainability
A
0 mins
Test Coverage

jest.mock('@/worker/db.js')
jest.mock('@/worker/data.js')

class Worker {
  constructor (path) {
    !window.onmessage && (window.onmessage = null)
    require(path)

    window.postMessage = message => {
      this.onmessage({ data: message})
    }
  }

  postMessage (message) {
    window.onmessage({ data: message})
  }
}

const newWorker = ()  => {
  return new Worker('@/worker/back.worker.js')
}

// const setSendMsgResArr = ({ msgType, sending }) => {
//   return [
//     { key: 'startSendmsg',
//       value: { sending: 2, toNickName: 'hoe', msgType } },
//     { key: 'sendmsgBack',
//       value: { leftMsgCount: 2, sending, toNickName: 'hoe', msgType } }
//   ]
// }

const testStart = (key, value, res) => {
  expect.assertions(1)

  const worker = newWorker(function () {
    console.log(this)
    this.notify(key, value)
  })

  worker.onmessage = event => {
    expect(event.data).toEqual(res || { key, value })
  }

  worker.postMessage({ key: 'start' })
}

describe('worker/back.worker.js', () => {
  test.skip('getUUID', () => {
    testStart('getUUID', 'uuid')
  })

  test.skip('getCode201', () => {
    testStart('getCode201', 'userAvatar')
  })

  test.skip('getCode408', () => {
    testStart('getCode408')
  })

  test.skip('getLoginStatusSuccessed', () => {
    testStart('getLoginStatusSuccessed')
  })

  test.skip('getUser', () => {
    testStart(
      'getUser',
      { Uin: '123', NickName: 'hehe' },
      { key: 'getUser', value: 'hehe' }
    )
  })

  test.skip('getMemberlist', () => {
    testStart('getMemberlist', 1)
  })

  test.skip('getMemberlistEnded', () => {
    testStart('getMemberlistEnded', [])
  })

  test.skip('batchlist', () => {
    testStart('batchlist', 1)
  })

  test.skip('onerror throw', async () => {
    expect.assertions(1)

    const worker = newWorker(async function () {
      const ctx = {}
      try {
        await new Promise(resolve => setTimeout(resolve, 1))
        throw new Error()
      } catch (err) {
        ctx.status = err.status || err.statusCode || err.code || 999
        ctx.message = err.message || '未处理错误'
        this.notify('onerror', ctx)
      }
    })

    worker.onmessage = event => {
      expect(event.data).toEqual({
        key: 'onerror',
        value: { status: 999, message: '未处理错误' }
      })
    }

    worker.postMessage({ key: 'start' })

    await new Promise(resolve => setTimeout(resolve, 1))
  })

  test('onerror reject', async () => {
    expect.assertions(1)

    const worker = newWorker()

    worker.onmessage = event => {
      expect(event.data.value.status).toBe(999)
    }

    worker.postMessage({
      key: 'sendmsg',
      value: {
        Type: 3,
        tos: ['joe1']
      }
    })

    await new Promise(resolve => setTimeout(resolve, 1))
  })

  test('sendmsg', async () => {
    expect.assertions(2)

    const sendmsg = async ({ msgType, sending }) => {
      const worker = newWorker()

      worker.onmessage = event => {
        expect(event.data.key).toBe('sendmsg')
      }

      worker.postMessage({
        key: 'sendmsg',
        value: {
          Type: msgType,
          // Content: 'hello',
          file: {
            lastModifiedDate: new Date()
          },
          tos: ['joe1']
        }
      })

      await new Promise(resolve => setTimeout(resolve, 1))
    }
    await sendmsg({ msgType: 1, sending: 1 })
    await sendmsg({ msgType: 3, sending: 3 })
  })

  test('getGroupList', () => {
    expect.assertions(1)

    const worker = newWorker()

    worker.onmessage = event => {
      expect(event.data).toEqual({ key: 'getGroupListBack', value: [] })
    }

    worker.postMessage({
      key: 'getGroupList'
    })
  })

  test('addGroup', () => {
    expect.assertions(1)
    
    const worker = newWorker()

    worker.onmessage = event => {
      expect(event.data).toEqual({
        key: 'addGroupBack',
        value: { md5: '123', groupName: '123' }
      })
    }

    worker.postMessage({
      key: 'addGroup',
      value: { md5: '123', groupName: '123' }
    })
  })

  test('delGroup', () => {
    const resArr = [
      { key: 'onerror', value: { status: 1000, message: '数据库错误' } },
      { key: 'delGroupBack', value: 1 }
    ]

    expect.assertions(resArr.length)
    
    const worker = newWorker()

    worker.onmessage = event => {
      expect(event.data).toEqual(resArr.shift())
    }

    worker.postMessage({
      key: 'delGroup',
      value: { index: 1, md5: '123' }
    })
    worker.postMessage({
      key: 'delGroup',
      value: { index: 1, md5: '123' }
    })
  })

  test('getGroup', () => {
    expect.assertions(1)
    
    const worker = newWorker()

    worker.onmessage = event => {
      expect(event.data).toEqual({
        key: 'getGroupBack',
        value: { listM: [], listB: [] }
      })
    }

    worker.postMessage({
      key: 'getGroup',
      value: { md5: '123' }
    })
  })

  test('changeStatus', () => {
    expect.assertions(1)
    
    const worker = newWorker()

    worker.onmessage = event => {
      expect(event.data).toEqual({
        key: 'changeStatusBack',
        value: { premd5: undefined, status: undefined, category: 1 }
      })
    }

    worker.postMessage({
      key: 'changeStatus',
      value: {
        md5: '123', item: {}, category: 1
      }
    })
  })
})