单元测试失败,因为在构造函数中创建的模拟数据与原始模拟数据不同

时间:2017-02-11 00:32:48

标签: unit-testing typescript jasmine

我刚刚开始学习单元测试,我已经编写了以下测试

const EXEPECTED: MergedFood = {
    id: '1',
    name: 'test mergedFood',
    ingredients: {
        '2': {
            foodID: '2'
        }
    }
}
describe('addIngredientToMergedFood()', () => {
    it('should add an ingredient to a mergedFood', () => {
        const mergedFood: MergedFood = new MergedFood('1', 'test mergedFood');
        const ingredient: Ingredient = new Ingredient('2')
        const result: MergedFood = addIngredientToMergedFood(ingredient, mergedFood);
        expect(result).toEqual(EXEPECTED);
    })
})

这是失败的,我收到以下失败错误:

  

预期的MergedFood({id:' 1',名称:'测试合并食品',成分:对象({2:成分({foodID:' 2' })})})等于对象({id:' 1',名称:'测试合并食品',成分:对象({2:对象({foodID:' 2'})})})

我希望您可以轻松看到,值和结构相同,但result有一个MergedFoodIngredient包装器(我假设它们是通过构造函数创建的)。

所以我的问题是,这种情况通常是如何处理的?模拟所有数据而不是使用构造函数是常见的(似乎很多工作)或者有没有办法剥离包装纸?

1 个答案:

答案 0 :(得分:0)

您可以使用

expect(JSON.stringify(result)).toEqual(JSON.stringify(EXPECTED));

您应该使用MergedFood中的一系列成分,[{}]而不是{{}}。否则,您的类包含名为' 2'的属性。不要忘记分号(例如描述(...); 或=新成分(' 2');