javascript - 如何在 Jest 中检查返回值

标签 javascript jestjs

我正在使用 jest 进行单元测试,并且能够成功运行其中的一些代码,但有些代码我不知道如何测试。

我有创建组织方法,需要首先检查组织是否已经存在。

async createOrganization(opt) {
    try {
        const organizationExist = await this.OrganizationRepository.getOne({name: opt.name})
        if (organizationExist) {
            throw new Error('Organization already exist')
        }    
    } catch (error) {
        throw error
    }

    let organizationObject = {}
    organizationObject.name = opt.name    
    return this.OrganizationRepository.save(organizationObject)
}

到目前为止,这是我能够涵盖的单元测试代码

describe('Create Organization', () => {
    it('should call getOne function', () => {
        const mockGetOne = jest.spyOn(OrganizationRepository.prototype, 'getOne')
        organizationService.createOrganization(expectedOrganization)
        expect(mockGetOne).toHaveBeenCalledWith({name: 'sample org'})
    })

    it('should return created organization', async () => {
        const mockSave = jest.spyOn(OrganizationRepository.prototype, 'save')
        mockSave.mockReturnValue(Promise.resolve(expectedOrganization))
        const result = await organizationService.createOrganization({name: 'sample org'})
        expect(mockSave).toHaveBeenCalledWith({name: 'sample org'})
        expect(result).toBe(expectedOrganization)
    })
})

现在我要测试的是这部分

const organizationExist = await this.OrganizationRepository.getOne({name: opt.name})
if (organizationExist) {
    throw new Error('Organization already exist')
}

如果使用名称参数的组织已存在,我想抛出错误。

希望大家能帮帮我。谢谢

最佳答案

您可以使用toThrowError来测试此场景。

it("Should throw error", async () => {
    const mockGetOne = jest.spyOn(OrganizationRepository.prototype, 'getOne')
    await organizationService.createOrganization({ name: 'sample org' }); ;
    expect(mockGetOne).toHaveBeenCalledWith({ name: 'sample org' });

    // Test the exact error message
    expect( organizationService.createOrganization({ name: 'sample org' }))
    .resolves
    .toThrowError(new Error("Organization already exist"));
});

关于javascript - 如何在 Jest 中检查返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60843620/

相关文章:

javascript - 带有集群和过滤器复选框的 Mapbox 个性化图标

javascript - 将元素添加到 const 集合

reactjs - 如何使用 Jest 获取测试文件上的 window.location.pathname?

javascript - 如何使用 Jest/Enzyme 测试去抖功能?

jestjs - Jest - 如何测试组件是否不存在?

javascript - 在 ng 类中的数组上使用的表达式

javascript - jquery datepicker datepicker beforeShowDay 明年不起作用

reactjs - 使用 Jest 对 Chakra UI 进行单元测试

javascript - Jestjs如何测试在另一个函数内部调用的函数

javascript - 获取对 Vue 子元素的引用