Javascript 单个存根的不同结果

Javascript 单个存根的不同结果,javascript,unit-testing,tdd,sinon,stub,Javascript,Unit Testing,Tdd,Sinon,Stub,在单元测试期间,我使用了一些数据检索方法。这些数据方法中的大多数是异步的,因此到目前为止,解析语法对此很方便。我试图实现的是基于Math.random()动态生成不同的测试数据,以自动覆盖代码上的不同分支,而不必为每种情况提供硬编码的样本输入数据。尽管如此,我还是意识到存根实际上只是在初始化时被调用一次,而不是在测试过程的执行过程中它的返回值得到固定/常量(基于)。是否有任何方法可以实际为单个存根提供不同的结果?我已经检查了onCall语法,但是它也提供了固定的输出,只是根据当前的迭代索引可以选

在单元测试期间,我使用了一些数据检索方法。这些数据方法中的大多数是异步的,因此到目前为止,
解析
语法对此很方便。我试图实现的是基于
Math.random()
动态生成不同的测试数据,以自动覆盖代码上的不同分支,而不必为每种情况提供硬编码的样本输入数据。尽管如此,我还是意识到存根实际上只是在初始化时被调用一次,而不是在测试过程的执行过程中它的返回值得到固定/常量(基于)。是否有任何方法可以实际为单个存根提供不同的结果?我已经检查了onCall语法,但是它也提供了固定的输出,只是根据当前的迭代索引可以选择,而不是实际的动态输出,它甚至可能是基于args/params的

欢迎提出任何意见

使用Sinon的当前存根:

sinon.stub(dynamodb, 'get').resolves(stubGet())
存根本身:

function stubGet () {
  // Choose random repo
  const i = Math.round(Math.random() * sampleData.length)
  const repo = sampleData[i]

  // Should it have "new code/push date"?
  const isNew = Math.round(Math.random()) === 1
  if (isNew) {
    repo.pushed_at = { S: '1970-01-01T00:00:00Z' }
  }

  console.log('repo', repo)
  const item = { Item: repo }
  console.log(item)
  return item
}

目标是希望获得随机的
repo
isNew
值。

随机性是不可预测的。测试代码应该是可预测的,包括测试数据。否则,您的测试可能会在某一天由于某些随机数据而失败

我们应该编写多个测试用例,每个测试用例使用固定的、尽可能简单的测试数据来测试代码的每个分支、场景等。断言返回的值是否满足您的期望


您应该使测试代码、测试数据可预测。有关更多信息,请参见

我同意,但某种程度的数据变异也有助于提供非标准场景,因为这些变化有适当的控制,而这正是我试图实现的here@gvasquez您应该自己控制存根的值,而不是依赖随机值。从代码中,我看不出有任何理由使用随机数据