当前位置: 首页 > 知识库问答 >
问题:

如何在测试值或子对象之前测试父对象的存在

长孙和悦
2023-03-14

使用Jest测试深层嵌套属性是否存在的最佳方法是什么。尝试以我想要的特定对象为目标将导致未定义的错误,因为其父对象不存在:

test('returns data from `server/index.js`', () => {
  const data = axios.get(httpObj)
     .then(data, => {
        expect(data.els[4]).not.toBeNull() 
        // ^ TypeError: Cannot read property '4' of undefined
  })
})

我应该以某种方式将这些连接起来,这样我就可以首先测试对象的存在,然后测试内部对象的存在吗?相当于在if语句中做这样的事情

if (obj && obj[4] && obj[4].hasOwnProperty('myProp')) {
  // pass
}

或者像这样在一个元素上进行多个测试时,是否应该有单独的测试?

test('returns data from `server/index.js`', () => {
  const data = axios.get(httpObj)
     .then(data, => {
        expect(data).not.toBeNull() 
  })
})

test('data returned from `server/index.js` api contains my property', () => {
  const data = axios.get(httpObj)
     .then(data, => {
        expect(data.els[4]).not.toBeNull() 
  })
})

我也尝试过:

const expected = {/* very large object */}
test('returns data from `server/index.js` and it contains an array containing the `expected` object', () => {
  expect(data.els[4]).toEqual(
    expect.objectContaining(expected)
  )
})

这有点管用?更好,但是需要我在测试文件中声明这个非常大的对象。这种非常深入的比较与测试文件中的静态数据块相结合,让我觉得很脆弱。有没有比我尝试过的更规范的方法

共有1个答案

吴同
2023-03-14

有很多方法可以做到这一点。最普通的方法就是显式地检查,比如obj

至于实际测试你的数据,我认为你可以安全地假设你的数据在测试中应该是什么样子。单独测试每个属性所遇到的危险是,如果您的数据由于任何原因改变了形状,您必须修复更多的测试,而不是仅仅假设在一个测试中您的数据会是什么样子。

 类似资料:
  • 我正在Saucelabs中运行测试,需要在运行时设置一个名为“name”的功能,这是测试方法的名称。这必须对来自DataProvider的每个DesiredCapables对象执行。 然后,我需要实例化一个活动的RemoteWebDriver对象,以便在包含此功能的情况下运行测试。 尝试运行代码时出错: 只能将ITestContext、XmlTest、Method、Object[]、ITestRe

  • 编者按:此代码示例来自Rust 1.0之前的版本,并且在语法上是无效的Rust 1.0代码。此代码的更新版本会产生不同的错误,但答案仍然包含有价值的信息。 在下面的例子中,我们似乎无法测试平等性。为什么会这样?有解决办法吗?(我使用的是Rust 0.11)。

  • 问题内容: 在AJAX请求之后,有时我的应用程序可能返回一个空对象,例如: 如何检查情况呢? 问题答案: ECMA 5+: Note, though, that this creates an unnecessary array (the return value of keys). Pre-ECMA 5: jQuery: lodash: Underscore: Hoek ExtJS Angula

  • 当我对它进行降序排序时,它应该首先显示Parent3,因为它有一个Z。这是我当前的hql,它得到了1>2>3的错误结果: 如果没有distinct,尽管它选择了多个相同的父级,但它仍然很好。 我有一个模型设置如下: 编辑:在集合中按HQL顺序对其进行排序,尽管当双亲具有相同的children.name值时,它不会比较下一个可能的值。即。 如果Parent1有孩子abba,zeon Parent2有

  • 问题内容: 我做了一个具有更多关系的小型应用程序。现在,我想删除表格的详细信息,如何删除我没有删除任何想法。 关系如下: PanCard->员工(Ono To One) Employee-> ProjectManger(与员工的双向多对一关联) 项目-> ProjectManager(与项目的双向多对一关联) 现在我要删除一张一张的表数据 以下是我的POJO类代码: PanCard.java Em