使用服务注入的angular2中的私有方法的单元测试

时间:2017-07-23 18:21:17

标签: angular unit-testing typescript jasmine

我有一个私有方法,我在其中调用一个在服务中定义的方法来获取一些数据。该服务是一个类

Angular2中的一些代码

function dataToTable(data) {
  const table = document.createElement("table")
  for (let item of data) {
    const row = document.createElement("tr")
    for (let value of Object.values(item)) {
      const td = document.createElement("td")
      td.textContent = value
      row.appendChild(td)
    }
    table.appendChild(row)
  }
  return table
}

var table_data = [{
    first_name: 'Rose',
    last_name: 'Tyler',
    home: 'Earth'
  },
  {
    first_name: 'Zoe',
    last_name: 'Heriot',
    home: 'Space Station W3 '
  }, {
    first_name: 'Jo',
    last_name: 'Grant',
    home: 'Earth'
  },
  {
    first_name: 'Leela',
    last_name: null,
    home: 'Unspecified'
  },
  {
    first_name: 'Romana',
    last_name: null,
    home: 'Gallifrey'
  },
  {
    first_name: 'Clara',
    last_name: 'Oswald',
    home: 'Earth'
  },
  {
    first_name: 'Adric',
    last_name: null,
    home: 'Alzarius'
  },
  {
    first_name: 'Susan',
    last_name: 'Foreman',
    home: 'Gallifrey'
  }
];



document.body.appendChild(dataToTable(table_data))

我如何在Jasmine中测试这段代码

1 个答案:

答案 0 :(得分:0)

取决于你是否想要做一些黑客来解决它是一种私人方法的事实,看看Makoto的评论。

但是你可以通过测试使用私有方法的公共方法测试它,它必须在你的类中的某个地方调用。例如

export class Example 1 {
   constructor() {}
   public foo() {
      this.bar()
   }
   private bar() {
     ... do awesome stuff ...
   }
}

这里你将测试foo()类以获得预期的行为,包括bar()中的行为。

在你的例子中,如果你想验证data.fetDetails是否被调用,那就窥探它并测试你的等于foo。