Angular 异步调用完成之前是否通过角度测试?
我有下面的角度(4)测试,它应该测试一个服务,然而,它似乎在可观察的返回和Angular 异步调用完成之前是否通过角度测试?,angular,typescript,jasmine,Angular,Typescript,Jasmine,我有下面的角度(4)测试,它应该测试一个服务,然而,它似乎在可观察的返回和expectget的命中之前通过了 it('should enter the assertion', inject( [ MockBackend, CellService ], ( backend: MockBackend, s: CellService ) => { const urls = []; backend.connec
expect
get的命中之前通过了
it('should enter the assertion', inject(
[ MockBackend, CellService ],
( backend: MockBackend, s: CellService ) => {
const urls = [];
backend.connections.subscribe((connection: MockConnection) => {
const req = connection.request;
urls.push(req.url);
if (req.method === RequestMethod.Get && req.url === '/api/getTest') {
connection.mockRespond(new Response(new ResponseOptions('enter mocked content')));
}
});
s.getCell('powders').subscribe(val => expect(true).toBeFalsy())
})
);
我试着添加async/await,但没有什么不同。我该怎么做
更新:
这个密码也通过了
it('should enter the assertion', async(inject(
[ MockBackend, CellService ],
( backend: MockBackend, s: CellService ) => {
const urls = [];
backend.connections.subscribe((connection: MockConnection) => {
const req = connection.request;
urls.push(req.url);
if (req.method === RequestMethod.Get && req.url === '/api/getTest') {
connection.mockRespond(new Response(new ResponseOptions('enter mocked content')));
}
});
s.getCell('powders').subscribe(val => expect(true).toBeFalsy())
})
));
用Angular的
async
import { async } from '@angular/core/testing';
---==== vvvv ===----
it('should enter the assertion', async(inject(
[ MockBackend, CellService ],
( backend: MockBackend, s: CellService ) => {
...
})
));
这将把测试包装在一个测试区域中,这将允许Angular在完成测试之前实际等待所有异步任务完成
另请参见:
勾选
import { fakeAsync } from '@angular/core/testing';
it('should enter the assertion', fakeAsync(inject(
[ MockBackend, CellService ],
( backend: MockBackend, s: CellService ) => {
...
let value;
s.getCell('powders').subscribe(val => {
value = val;
})
tick();
expect(val).toBeTruthy();
})
));
它应该使用async
,但是使用fakeAsync
会使调试变得更容易,因为每件事情都是同步的
如果它仍然不起作用,那么您可能需要在其他地方检查逻辑。我要开的一张支票在这里
req.method === RequestMethod.Get && req.url === '/api/getTest'
你确定这两个都通过了吗?如果没有,将没有响应。我更愿意在这里使用Jasmine
done()
回调
首先,去除规范中的喷油器,并在每个部分之前使用TestBed.get(serviceToken)
中的
第二,作为spec函数的参数传递done
it('should use asynchronous', done => {
s.method().subscribe(result => {
expect(result).toBe(...);
done();
}
})
查看我的更新问题,我尝试了这种方法,但仍然没有看到预期的行为,我是否做错了什么?查看我的更新。确保条件通过。如果没有,将没有回应。