javascript - 如何编写 Jest 测试脚本来检查常量的值

标签 javascript jestjs

我有一个这样定义的常量列表

const actions = {}
// Home
actions.HOME = {}
actions.HOME.SET_PROFILE_ID = 'SET_PROFILE_ID'
actions.HOME.LOAD_PROFILE = 'HOME_LOAD_PROFILE'
actions.HOME.SET_PROFILE = 'HOME_SET_PROFILE'

actions.OUTSIDE = {}
actions.OUTSIDE.UPDATE_PROFILE_ID = 'SET_PROFILE_ID' // this should error

module.exports = actions

带有 in objects 的对象是为了帮助智能感知,这样开发人员就可以缩小范围。

我想使用 jest 编写一个测试,以确保没有 2 个常量具有相同的值,无论深度如何,否则它会产生非常奇怪的错误,难以在运行时调试。我不太了解文档以及如何执行此操作。 https://jestjs.io/docs/en/using-matchers但这是我第一次进行任何单元测试。

谢谢

-编辑

这就是我目前所拥有的。根据 Jared Smiths 的评论,我离正确答案还很远,因为这太简单了。它只发现第一个错误,而不是所有错误。

describe('Actions.js', () => {
  it('verify no duplicate action values', () => {
    const flattenActions = []
    _.forEach(actions, store => {
      _.forEach(store, action => {
        flattenActions.push(action)
      })
    })
    const testedActions = []
    _.forEach(flattenActions, action => {
      expect(testedActions).not.toContain(action)
      testedActions.push(action)
    })
  })
})

最佳答案

首先,您可以获得操作的所有值

function getDeepValues(obj) {
let values = [];
for (const key in obj) {
    if (typeof obj[key] === 'object') {
        const subVals = getDeepValues(obj[key]);
        values = [...values, ...subVals];
    } else {
        values.push(obj[key]);
    }
}
  return values;
}

将输出如下内容:

[ 'SET_PROFILE_ID', 
  'HOME_LOAD_PROFILE', 
  'HOME_SET_PROFILE', 
  'SET_PROFILE_ID' ]

然后测试数组是否不包含任何重复项:

function arrayHasNoDuplicate(arr) {
  return arr.every(num => arr.indexOf(num) === arr.lastIndexOf(num));
};

现在你必须运行你的测试:

describe('Actions.js', () => {
it('verify no duplicate action values', () => {
  const actionsArray = getDeepValues(actions);
  const hasNoDuplicates = arrayHasNoDuplicate(actionsArray);
  expect(hasNoDuplicates).toBeTruthy();
  })
})

希望对您有所帮助!

关于javascript - 如何编写 Jest 测试脚本来检查常量的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56011195/

相关文章:

javascript - AngularJS/Typescript 集成模式 - 范围方法

javascript - 结束 2 结束测试是否足够?

javascript - 如何使用 jest 测试 React 组件

typescript - 如何使用 Jest 模拟封装在服务类中的 winston 记录器实例

angular - 使用 Jest 时无法理解的单元测试效果错误

javascript - 检查表中的所有数据值

javascript - 如何让文本区域填充表格列的高度?

javascript - mongodb中的递增索引

reactjs - 如何测试动态页面标题?

javascript - 如何在 Jest 中设置变量作用域?