【发布时间】:2017-12-11 15:27:35
【问题描述】:
所以,我在测试我的 Angular 2 服务时遇到了一些麻烦。我的测试被标记为通过,但我在控制台中收到此错误:
context.js:243 未处理的 Promise 拒绝:'expect' 使用时 没有当前规范,这可能是因为异步测试 时间到 ;区域:代理区域;任务:Promise.then;值:错误: 当没有当前规范时使用“期望”,这可能是 因为异步测试超时
我的服务使用 PouchDB 并返回一个承诺。
这是我的服务:
import { Injectable } from '@angular/core';
import { Project } from './project';
declare var PouchDB:any;
@Injectable()
export class ProjectService {
db: any;
constructor() {
if(navigator.vendor && navigator.vendor.indexOf('Apple') > -1){
this.db = new PouchDB('projects', {adapter: 'fruitdown'});
}else{
this.db = new PouchDB('projects');
}
}
saveProject(project:Project): Promise<any>{
return this.db.put(project);
}
getProjects(limit:number,skip:number): Promise<any> {
return this.db.allDocs({
include_docs: true,
attachments: false,
descending: true,
limit: limit,
skip: skip
});
}
}
这是我的规格
import { TestBed, inject, async } from '@angular/core/testing';
import { Project, ProjectService } from './index';
describe('ProjectService', () => {
let project: Project;
let service: ProjectService;
let createFakeProject = function() {
let project = new Project;
project._id = 'iwhxu27i';
project.name = 'foo bar';
project.email = 'foo@b.ar';
return project;
}
beforeEach(() => {
const injector = TestBed.configureTestingModule({
providers: [ProjectService]
});
service = injector.get(ProjectService);
project = createFakeProject();
});
it('should be able to CREATE a new project (async)',
async( (done) => {
service.saveProject(project).then(
response => {
expect(response).toEqual(project);
done();
} );
}));
});
...好吧,所以我一直在摆弄这个。我可能需要使用 fakeAsync 和 tick()?? fakeAsync 感觉不对。看起来我应该在 .finally() 块中调用 done() 但 .finally() 不是一种方法。我是使用 Jasmine 测试 Promise 的新手,所以也许我遗漏了一些明显的东西?如果您知道任何使用 angular2、jasmine 和 promises 的代码(或示例代码);这会很有帮助。
我不想模拟 PouchDB 并返回我自己的存根 Promise。
这个测试应该失败,因为 response != project;它没有,但我在控制台中收到错误。帮忙!
【问题讨论】:
标签: angular typescript promise jasmine pouchdb