【问题标题】:TypeError: 'undefined' is not an object (evaluating 'promise.data.map')TypeError:“未定义”不是对象(评估“promise.data.map”)
【发布时间】:2014-06-13 17:25:18
【问题描述】:

我目前正在为一个以 Angular 版本实现的项目创建单元测试。 1.2
我创建了一个 mockService 返回一个延迟的承诺,以便与我的控制器测试一起使用。服务方法如下所示:

function getItems() {
    var deferred = $q.defer();
    deferred.resolve(["item1", "item2"]);
    $rootScope.$apply();

    return deferred.promise;

}

当我调用这个服务方法并执行 deferred.resolve 时,我得到一个错误

TypeError: 'undefined' is not an object (evaluating 'promise.data.map')

有谁知道promise.data.map 是什么以及我需要做什么来修复错误?

【问题讨论】:

  • 听起来好像任何调用getItems 都没有将结果视为承诺。也许如果您发布调用它的代码,我们可以提供进一步的见解。
  • 结果被视为承诺,但感谢您的建议。事实证明这根本不是那么棘手。有一个方法 promise.data.map 将结果映射到 .then 方法中的另一种格式。因为我发送的是字符串而不是对象,所以这个映射失败了。
  • 你为什么会选择返回一个已经解决的承诺?
  • 代码用于单元测试,对于我的测试,可以返回已解决的承诺。

标签: javascript angularjs unit-testing promise


【解决方案1】:

这里是您问题的解决方案

在您的问题中,您试图在导致问题的控制器中定义的rootScope 的值之前调用promise。因此它返回未定义的值。

尝试在controller 中的rootScope 值之后定义承诺,这可能会修复错误消息

希望这个解决方案对您有所帮助。

【讨论】:

  • 如果你遇到更多问题,请把整个代码sn-p给我,因为根据小实现很难检查,谢谢
猜你喜欢
  • 2021-12-17
  • 2021-12-01
  • 2019-11-16
  • 2020-02-09
  • 2019-12-07
  • 2022-01-01
  • 2019-01-20
  • 2021-07-24
  • 2016-09-02
相关资源
最近更新 更多