在javascript

时间:2015-09-02 14:45:56

标签: javascript unit-testing constructor angularjs-service angularjs-factory

我的结构是这样的,因为我需要将它作为angularjs Factory注入。然而,当我使用它站起来为它创建一个测试时,我遇到了困难。我无法在ItemModelGenerator中引用ItemModel!我不能通过使用它作为构造函数来创建它的实例!我尝试了很多方法使用new的关键字或调用两者,调用或者在bot中传递参数,或者其中没有一个工作。我很困惑......

这可能以某种方式使用此ItemModelGenerator作为另一个var的构造函数吗?或者,假设使用其中的ItemModel来生成,但在条件当然,var必须在ItemModelGenerator之外,因为它是一个工厂。

我试过了:

var Service = new ItemModelGenerator();
Service.ItemModel();

new ItemModelGenerator().ItemMode();

new ItemModelGenerator.ItemMode();

..etc

顺便说一句,它确实可以作为angularjs工厂注塑使用,经过测试。

由于

'use strict';
function ItemModelGenerator() {
  function ItemModel(inputItem) {
    var defaults = {
      id:'na',
      name:'na'
    };
    var location = inputItem ? inputItem : { defaults };
    this.id = location.id;
    this.name = location.itemName ? location.itemName : location.name;
    this.itemIsReal = this.isReal(this.id);
  }

  ItemModel.prototype.isReal = function(id) {
    return id !== false ? true : false;
  };

  return ItemModel;
}

2 个答案:

答案 0 :(得分:3)

当您致电ItemModel时,您将从ItemModelGenerator返回ItemModelGenerator。那么你得到的回复 ItemModel

var ItemModel = ItemModelGenerator();
var instance = new ItemModel();
alert(instance.name);

答案 1 :(得分:1)

您将返回构造函数作为包装函数的结果。尝试:

var Service = new ItemModelGenerator()();