Разрешить обещания в тестах angular, если $ q и $ rootScope com из разных инжекторов

#angularjs #promise

#angularjs #обещание

Вопрос:

У меня есть интересная проблема для всех angular ninjas. Может ли кто-нибудь из вас объяснить, почему служба $ rootScope, введенная одним инжектором, не может разрешить обещания с помощью $ apply / $ digest, созданного с помощью сервисов $ q из другого инжектора.

Это можно воспроизвести с помощью следующего теста, написанного на typescript:

 describe("TestInjection", () => {

    let rootScope1 : angular.IRootScopeService;
    let q1 : angular.IQService;
    let rootScope2 : angular.IRootScopeService;
    let q2 : angular.IQService;

    beforeEach(() => {
        let $injector1 : angular.auto.IInjectorService = angular.injector(["ng"]);
        let $injector2 : angular.auto.IInjectorService = angular.injector(["ng"]);
        // noinspection TsLint

            q1 = $injector1.get("$q");
            q2 = $injector2.get("$q");
            rootScope1 = $injector1.get("$rootScope");
            rootScope2 = $injector2.get("$rootScope");
    });

    describe("with regard injection and promise testing", () => {

        it("promise should be resolved if both services come from the same injector", () => {
            let deferred = q1.defer();
            let value = false;
            deferred.promise.then((v : boolean) => {
                value = v;
            });
            deferred.resolve(true);
            rootScope1.$digest();
            expect(value).toBeTruthy();
        });

        it("promise should be resolved if both services come from different injectors", () => {
            let deferred = q1.defer();
            let value = false;
            deferred.promise.then((v : boolean) => {
                value = v;
            });
            deferred.resolve(true);
            rootScope2.$digest();
            expect(value).toBeTruthy();
        });
    });
});
  

Я хотел бы понять, почему вещи ведут себя таким образом.