Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 用茉莉花测试嵌套的AngularJS承诺_Javascript_Angularjs_Unit Testing_Jasmine_Angular Mock - Fatal编程技术网

Javascript 用茉莉花测试嵌套的AngularJS承诺

Javascript 用茉莉花测试嵌套的AngularJS承诺,javascript,angularjs,unit-testing,jasmine,angular-mock,Javascript,Angularjs,Unit Testing,Jasmine,Angular Mock,我希望测试嵌套的承诺,但我不确定如何进行 我如何测试这样的场景 angular.module('moduleA') .factory('serviceA', function(serviceB){ return { create: create } function create(){ return serviceB.create().then(function(d){ serviceB.doSomething();

我希望测试嵌套的承诺,但我不确定如何进行

我如何测试这样的场景

angular.module('moduleA')
   .factory('serviceA', function(serviceB){

  return {
      create: create
  }

  function create(){

    return serviceB.create().then(function(d){

        serviceB.doSomething();

        return $state.go("app.list", { id: d.id }).then(function(){

            serviceB.doSomethingElse();

        });

    })

  };
}); 
我想在哪里测试

    expect(serviceB, 'create').toHaveBeenCalled();
    expect($state, 'go').toHaveBeenCalledWith("app.list", { id: newId });
    expect(serviceB, 'doSomething').toHaveBeenCalled();
    expect(serviceB, 'doSomethingElse').toHaveBeenCalled();
以下是我的尝试:

describe('serviceA spec', function () {

var $rootScope, $state, serviceA, serviceB;

beforeEach(function () {

    $state = {
        go: function(){}
    }

    serviceB = {
        create: {},
        doSomething: {},
        doSomethingElse: {}
    }

    module('app', function($provide){
        $provide.value('serviceB', serviceB);
        $provide.value('$state', $state);
    });

    inject(function (_$rootScope_, _serviceA_) {
        serviceA =_serviceA_;
        $rootScope = _$rootScope_;
    });
});

it('should create', function(){

    var newId = "555";

    spyOn($state, 'go').and.callFake(function () {
        var deferred = $q.defer();
        deferred.resolve({});
        return deferred.promise;
    });

    spyOn(serviceB, 'create').and.callFake(function () {
        var deferred = $q.defer();
        deferred.resolve({ id: newId });
        return deferred.promise;
    });

    spyOn(serviceB, 'doSomething');
    spyOn(serviceB, 'doSomethingElse');

    serviceA.create();

    expect(serviceB, 'create').toHaveBeenCalled();
    expect($state, 'go').toHaveBeenCalledWith("app.list", { id: newId });
    expect(serviceB, 'doSomething').toHaveBeenCalled();
    expect(serviceB, 'doSomethingElse').toHaveBeenCalled();

    $rootScope.$digest();

});

});

如果您在每次承诺后都必须调用
$rootScope.$apply()
,我们将非常感谢您提供的任何建议,以确保承诺得到充分履行