【问题标题】:Jasmine, Karma, Mocking a Promise Properly茉莉花,业力,正确地嘲笑一个承诺
【发布时间】:2018-05-30 03:42:57
【问题描述】:

我的 Angular 责任之一是非常新的,所以这个问题可能有答案,我只是不知道要使用的术语....抱歉。

我的服务端点:

//Initializes loading sort device config when the page is loaded
checkSortCfg(forceReload?: boolean): Promise<void>
{
    ...snip....

    let promise = self.sortApiSvc.getOut()
    
    ....snip.... 
    return promise;

}

上面调用的 API 服务:

getOut(): Promise<string[]> {
    const url = this.uriService.getAppServerUri('...');
    return this.http.get<any>(url).toPromise();
}

我的单元测试,我省略了之前的每个等,因为一切似乎都正常运行。

我对 API 调用的模拟:

sortApiServiceCallSpy = jasmine.createSpyObj("SortApi", ["getOut"]);
sortApiServiceCallSpy.getOut.and.callFake(function () {
        return {
            then: function (callback) {
                return callback([
                    { value: new Observable<string[]>((observer) => { observer.complete(); }).toPromise() }
                ]);
            }
        };
    });

当我运行测试和调试时,我的模拟返回为未定义

ReferenceError: 未定义承诺。

让承诺 = self.sortApiSvc.getOut()

所以我的模拟返回值一定是错误的。

sortApiServiceCallSpy.getOut.and.callFake(function () {
        return {
            then: function (callback) {
                return callback([
                    { value: new Observable<string[]>((observer) => { observer.complete(); }).toPromise() }
                ]);
            }
        };
    });

【问题讨论】:

  • 你为什么不试试sortApiServiceCallSpy.getOut.and.returnValue(Promise.resolve(value));
  • @AmitChigadani 成功了。为什么不回答一下,让我接受。
  • 很高兴听到这个消息。我已经添加了答案。

标签: angular jasmine


【解决方案1】:

您可以简单地尝试以下方法来返回模拟 Promise

sortApiServiceCallSpy.getOut.and.returnValue(Promise.resolve(value));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-12
    • 2017-01-15
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 2015-09-19
    • 1970-01-01
    • 2016-04-02
    相关资源
    最近更新 更多