用 Jest 测试抛出

Testing throw with Jest

我有以下功能要测试:

export const createContext = async (context: any) => {
  const authContext = await AuthGQL(context)
  console.log(authContext)
  if(authContext.isAuth === false) throw 'UNAUTHORIZED'
  return authContext
}

我正在尝试通过以下方式测试上述功能:

describe('Testing Apollo service file', () => {
  beforeAll(async () => {
    await mongoConnect()
  })

  test('test apollo context setup and configuration', () => {
    const mockContext = {
      req: {
        headers: {
          
        }        
      }

    } as ExpressContext

    expect(() => createContext(mockContext)).toThrow()
  })

  afterAll(async () => {
    await mongoDisconnect()
  })
})

我的 beforeAll afterAll 调用只是 connecting/disconnecting 来自将用于数据目的的本地数据库。我传递的 mockContext 通常会包含更多内容,但出于测试的目的,我故意缺少字段以确保 createContext 抛出 'UNAUTHORIZED'

这是测试的终端输出:

已更新

根据 Jest 文档并进行更多测试:https://jestjs.io/docs/using-matchers 我编写了另一个抛出错误的函数并通过以下行进行了测试:

// test sync function
function compileAndroidCode() {
  throw new Error('UNAUTHORIZED');
}

// Expect function that tests the thrown error
expect(() => compileAndroidCode()).toThrow('UNAUTHORIZED')

所以我似乎在测试中弄乱了 async/await 语法。

您有一个 async 功能,因此您需要 await 它。像这样尝试:

  test('test apollo context setup and configuration',async  () => {
    const mockContext = {
      req: {
        headers: {
          
        }        
      }

    } as ExpressContext

   await expect(createContext(mockContext)).rejects.toThrow()
  })