0
我定义MyService
如下承诺无法与TypeMoq模拟化解
export interface MyService {
doStuff(): Promise<any>;
}
和MyClass
消耗MyService
作为
import {MyService} from "./my.service";
import {Observable} from "rxjs/Observable";
export class MyClass {
constructor(private myService: MyService) {}
useMyService(): Observable<boolean> {
return Observable.create(obs => {
this.myService.doStuff()
.then((res: any) => {
console.log("Promise resolved!");
obs.next(true);
})
.catch((err: any) => {
console.log("Promise rejected!");
obs.error(false);
})
});
};
}
另外,我有一个接口MyModel
定义为
export interface MyModel {
someProperty: string;
}
现在我想写一个测试s我可以用TypeMoq模拟MyService
。所以我做了以下
describe('MyClass',() => {
it('useMyService returns true when myService returns true', (done) => {
let mockModel = TypeMoq.Mock.ofType<MyModel>();
mockModel.setup(x => x.someProperty).returns(() => "info");
let mockMyService = TypeMoq.Mock.ofType<MyService>();
mockMyService.setup(x => x.doStuff()).returns(() => Promise.resolve(mockModel.object));
let myClass = new MyClass(mockMyService.object);
myClass.useMyService().subscribe(
(result: boolean) => {
expect(result).toBeTruthy();
done();
},
(error: any) => {
expect(error).toBeFalsy();
done();
});
});
});
然而,Promise.resolve(mockModel.object)
似乎从来没有在与TypeMoq模拟提供如上图所示,即,我没有得到解决“无极解决!” (或“承诺拒绝!”)打印到控制台,茉莉花测试超时。
如果我更换Promise.resolve(mockModel.object)
与Promise.resolve({ someProperty: 'info'})
,即
let mockMyService = TypeMoq.Mock.ofType<MyService>();
mockMyService.setup(x => x.doStuff()).returns(() => Promise.resolve({ someProperty: 'info'}));
那么测试工作(我得到 “无极解决!” 打印到控制台)。为什么Promise.resolve()
在提供TypeMoq模拟时解析?
欢迎您访问解决方案的链接,但请确保您的答案在没有它的情况下是有用的:[添加链接的上下文](// meta.stackexchange.com/a/8259),以便您的同行用户了解什么它是,为什么它在那里,然后引用您链接到的页面最相关的部分,以防目标页面不可用。 [答案只是一个链接而已,可能会被删除。](// stackoverflow.com/help/deleted-answers) – sudo
这不是一个解决方案的链接,它是图书馆作者在问题上的立场声明,我提交的内容本身很有用,因为它确保了提问者他们遇到的困难不是他们自己的错。这就是说,我会试图扩大答案。 –