Jasmine 在测试 Promises 时忽略测试

Jasmine Ignoring Tests When Testing Promises

我 运行 遇到了一个奇怪的问题。根据我的日志消息,我正在测试的功能工作正常,但它似乎忽略了我尝试提供的任何 expect 断言。

这是被测方法:

getSessionContext(): Promise<ISessionContext> {
    let query = '{\
        user {\
            userId\
            clientId\
            partnerId\
            userType\
            visibleId\
            firstName\
            lastName\
            emailAddress\
            profileImageUrl\
        }\
        partner {\
            id\
            clients {\
                clientId\
                partnerId\
                clientName\
            }\
        }\
    }';

    let success = action("AuthService.getSessionContext", (sessionContext: ISessionContext) => {
        if (!sessionContext.user) {
            throw new Error('Request failed');
        }

        this.sessionContext = sessionContext;
        this.userInfo = sessionContext.user;
        this.activeClientId = this.userInfo.clientId; //default to primary client
        this.isLoggedIn = true;

        return sessionContext;
    });

    return this.graphQLService.query({query}, {unscoped: true})
        .then(success, (data) => {
            console.error('Unable to get session information', data);
        }) as Promise<ISessionContext>;
}

这是我目前的规格:

fdescribe('::getSessionContext', () => {
    it('returns a valid sessionContext', () => {
        spyOn(svc.graphQLService, 'query').and.returnValue(promise_STUB);

        console.log(`sessionContext BEFORE ${JSON.stringify(svc.sessionContext)}`);
        expect(svc.sessionContext.user).toBeFalsy();
        console.log(`userInfo BEFORE ${JSON.stringify(svc.userInfo)}`);

        svc.getSessionContext().then
        (
            (result) => {
                console.log(`****************************`);
                console.log(`final result ${JSON.stringify(result)}`);
                console.log(`sessionContext AFTER ${JSON.stringify(svc.sessionContext)}`);
                expect(svc.sessionContext.user).toEqual({});

                console.log(`userInfo AFTER ${JSON.stringify(svc.userInfo)}`);
                expect(svc.userInfo).toEqual(promiseValue.user);

                //FIXME expect statements are being ignored
                expect(true).toBeFalsy();
                done();
            }
        );
    });
});

这是终端输出:

LOG: 'sessionContext BEFORE {"partner":{"clients":[{"clientId":1234},
{"clientId":1235},{"clientId":1236},{"clientId":1237}]}}'
LOG: 'userInfo BEFORE {"partnerId":1234,"clientId":1235}'
LOG: '****************************'
LOG: 'final result {"user":{}}'
LOG: 'sessionContext AFTER {"user":{}}'
LOG: 'userInfo AFTER {}'

如您所见,终端输出确认函数正在运行。然而,它完全忽略了我试图做出的任何期望陈述。关于为什么会发生这种情况的任何想法?

您没有将 done 回调传递给测试函数。

尝试将 it('returns a valid sessionContext', () => { 更改为 it('returns a valid sessionContext', (done) => {