相关疑难解决方法(0)

在JasmineJS测试中未触发AngularJS Promise回调

问题介绍

我正在尝试对包装Facebook JavaScript SDK FB对象的AngularJS服务进行单元测试; 但是,测试不起作用,我无法弄清楚原因.此外,当我在浏览器中运行它而不是使用Karma测试运行器运行的JasmineJS单元测试时,服务代码可以正常工作.

我正在通过$q 对象使用Angular promises测试异步方法.我将测试设置为使用Jasmine 1.3.1异步测试方法异步运行,但waitsFor() 函数永远不会返回true(请参阅下面的测试代码),它只是在5秒后超时.(Karma尚未附带Jasmine 2.0异步测试API).

我认为这可能是因为then()promise 的方法永远不会被触发(我有一个console.log()设置来显示),即使我$scope.$apply()在异步方法返回时调用,让Angular知道它应该运行一个摘要周期并触发then()回调...但我可能是错的.

这是运行测试时出现的错误输出:

Chrome 32.0.1700 (Mac OS X 10.9.1) service Facebook should return false
  if user is not logged into Facebook FAILED
  timeout: timed out after 5000 msec waiting for something to happen
Chrome 32.0.1700 (Mac OS X 10.9.1):
  Executed 6 of 6 (1 FAILED) (5.722 …
Run Code Online (Sandbox Code Playgroud)

javascript jasmine angularjs karma-runner

40
推荐指数
2
解决办法
1万
查看次数

angularjs - 承诺永远不会在控制器中解决

在我的控制器中,我得到了另一项服务的承诺.我为它添加了一个'then'子句,但是从未调用过'then'.

看到这个plunker:http://plnkr.co/edit/dX0Oz1?p = preview (javascript版)

'fakeLongRunningPromise'创建一个在2秒后自行解决的承诺.

在控制器本身,一旦解决了承诺,我就会向控制台发送一个注释.

我可以说,承诺正在得到解决,因为它将"解决承诺"输出到控制台.为什么不输出"承诺解决"?

想到可能承诺会超出范围,因为控制器会返回?

angularjs

8
推荐指数
1
解决办法
4221
查看次数

AngularJS:在服务中链接http承诺$ q

当谈到angularjs中的$ http承诺时,我遇到了问题.我在我的服务中这样做:( getSomething函数应链接两个promises)

第二个函数使用外部回调函数!

app.service('blubb', function($http, $q) {

  var self = this;

  this.getSomething = function(uri, data) {
    return self.getData(uri).then(function(data2) {
      return self.compactData(uri, data2);
    });
  };

  this.getData = function(uri) {
    var deferred = $q.defer();
    $http.get(uri).success(function(data) {
      deferred.resolve(data);
    }).error(function() {
      deferred.reject();
    });

    return deferred.promise;
  };

  this.compactData = function(uri, data) {
    var deferred = $q.defer();
    /* callback function */
      if(!err) {
        console.log(compacted);
        deferred.resolve(compacted);
      } else {
        console.log(err);
        deferred.reject(err);
      }
    /* end of function */

    return deferred.promise;
  };
});

当我在我的控制器中使用该服务时,它不会输出console.log:

blubb.getSomething(uri, input).then(function(data) {
  console.log(data) …

promise deferred angularjs

8
推荐指数
2
解决办法
9737
查看次数

AngularJS:控制器范围不会与promise同步

我已经选择了一个项目,我正在尝试将一些数据从服务返回到我的控制器.我已经在这里待了大约12个小时,并尝试了不同的方法.它们通常都会产生同样的"缺失数据".

我试过了

  • 使用$ resource而不是$ http
  • $http.get右侧放在控制器内而不使用promises
  • 服务作为实际服务(而不是工厂)没有返回
  • 建立工厂的一系列不同方式以各种格式返回数据
  • 使用setTimeout和$ apply

我觉得我现在所拥有的是一个简单的,因为我可以得到它,而我所读到的一切都说这应该有效

angularjs的负载数据从服务

角控制器斜面-GET-数据从服务

angularjs - 承诺 - 不烧时,返回-从一种服务

angularjs - 承诺 - 不解决,适当

angularjs-承诺

这些链接就是从今天开始的.

我认为可能存在$ scope问题,因为过去我已经看到$ scopes在使用多个控制器时没有获取数据,但是该站点只是在index.html中声明一个控制器作为<body ng-app="myApp" ng-controller="BodyCtrl">设置.主app.js使用状态(我认为来自ui-router)就像这样......

.state('app.view', {
    url: '/view',
    templateUrl: 'views/view.tpl.html',
    controller: 'MyCtrl'
   })
Run Code Online (Sandbox Code Playgroud)

将控制器连接到不同的页面.此外,该网站还有一些其他控制器从服务中获取数据,我首先将其作为模板查看,然而,数据和返回比我想要的更复杂.但最重要的是,控制器正在访问服务提供的数据.他们都使用$ resource,这就是我从这个问题开始的方式.我坚持使用$ http因为它应该可以工作,而且我希望在我进入"更高级别"的东西之前使用它.另外,我只需要从端点获取GET,所以觉得$ resource太过分了.

服务

.factory('MyService', ['$http', '$q', '$rootScope', function ($http, $q, $rootScope) {
    var defer = $q.defer();
    var factory = {};
    factory.all = function () {
        $http({method: 'GET', url: 'http://URLtoJSONEndpoint'}). …
Run Code Online (Sandbox Code Playgroud)

angularjs angularjs-service angularjs-scope angularjs-controller angularjs-http

6
推荐指数
1
解决办法
8113
查看次数