Как создавать объекты через цикл?
Чтобы получить то, что Вы хотите, нужно в цикле
objFun[num] = { // заменить num на i
  test1: 1,
  test2: 2
}
В следствии этой опечатки у Вас код в цикле просто num-1 раз создаёт в объекте одно и то же свойство с именем num.
Прямой ответ на прямой вопрос:
/* Как создавать объекты через функции? */

function getObj(id, name) {

  return {
    id: id,
    name: name
  }

}

console.log(getObj(1, 'myFirstObject').name)