【问题标题】:test function in Jest use wrong result from the other functionJest 中的测试函数使用来自其他函数的错误结果
【发布时间】:2021-03-01 17:45:11
【问题描述】:

我对使用 Jest 编写测试文件非常陌生,我的目的是测试 applyPromotion 函数是否按预期工作。这是我的代码

describe('Promotion: Discount By', () => {
    let menu = [{id:1, name: menu A}, {id:2, name: menu B}]

    it('case 1', async () => { 
       var promotion = [{id:'P1', name:'promotion 1'}]
       var result = await applyPromotion(menu, promotion)
       expect(result['discountType']). toEqual('1')
    });

    it('case 2', async () => { 
       var promotion = [{id:'P2', name:'promotion 2'}]
       var result = await applyPromotion(menu, promotion)
       expect(result['discountType']). toEqual('2')
    });
})

运行测试后,“案例 2”的结果将返回“案例 1”的结果。 我已经更改为使用mockReturnValueOnce 作为结果,但它也不起作用。

PS。我有另一个测试文件,其格式与上面的示例相同,而且效果很好。

你们能告诉我我的代码有什么问题吗?

【问题讨论】:

  • 由于您没有说明您使用 mockReturnValueOnce 的方式/位置,因此很难想象您可能做错了什么
  • 起初,我以为是变量结果没有更新的原因。所以,我尝试在得到结果之前使用mockReturnValueOnce。但实际上,这不是根本原因:(

标签: node.js jestjs


【解决方案1】:

终于,我找到了答案。变量menu 引起的问题在传递给applyPromotion 函数时已自行更新。当函数 case 2 运行时,它使用 case 1 中的变量 menu

所以,我通过添加beforeEach 来更新一些代码,并在里面设置变量menu,这样就可以了!!

describe('Promotion: Discount By', () => {
let menu

// reset menu every round when run each test function
beforeEach(() => {
   menu = [{id:1, name: menu A}, {id:2, name: menu B}]
})

it('case 1', async () => { 
   var promotion = [{id:'P1', name:'promotion 1'}]
   var result = await applyPromotion(menu, promotion)
   expect(result['discountType']). toEqual('1')
});

it('case 2', async () => { 
   var promotion = [{id:'P2', name:'promotion 2'}]
   var result = await applyPromotion(menu, promotion)
   expect(result['discountType']). toEqual('2')
});

})

【讨论】:

    猜你喜欢
    • 2020-09-03
    • 2020-01-05
    • 2019-11-28
    • 1970-01-01
    • 2020-10-22
    • 2020-07-31
    • 2020-01-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多