@angular/http
'a bağlı olan sınama kodu MockBackend
kullanıyorum. Bunu denedik, ancak
thoughtram: Testing Services with Http in AngularAçısal: HTTP ile MockBackend'i test etmek, async() gerçekten gerekli midir?
describe('getVideos()',() => {
it('should return an Observable<Array<Video>>',
async(inject([VideoService, MockBackend], (videoService, mockBackend) => {
videoService.getVideos().subscribe((videos) => {
expect(videos.length).toBe(4);
expect(videos[0].name).toEqual('Video 0');
expect(videos[1].name).toEqual('Video 1');
expect(videos[2].name).toEqual('Video 2');
expect(videos[3].name).toEqual('Video 3');
expect("THIS TEST IS FALSE POSITIVE").toEqual(false);
});
const mockResponse = {
data: [
{ id: 0, name: 'Video 0' },
{ id: 1, name: 'Video 1' },
{ id: 2, name: 'Video 2' },
{ id: 3, name: 'Video 3' }
]
};
mockBackend.connections.subscribe((connection) => {
connection.mockRespond(new Response(new ResponseOptions({
body: JSON.stringify(mockResponse)
})));
});
})));
});
ve ben MockBackend tamamen senkron yürütür eminim:: web genelinde
Tüm örnekler buradaki gibi, eşzamanlı olmayan bir test kurulumunu kullanmak
describe('getVideos()',() => {
it('should return an Observable<Array<Video>>',
inject([VideoService, MockBackend], (videoService, mockBackend) => {
const mockResponse = {
data: [
{ id: 0, name: 'Video 0' },
{ id: 1, name: 'Video 1' },
{ id: 2, name: 'Video 2' },
{ id: 3, name: 'Video 3' },
]
};
mockBackend.connections.subscribe((connection) => {
connection.mockRespond(new Response(new ResponseOptions({
body: JSON.stringify(mockResponse)
})));
});
let videos;
videoService.getVideos().subscribe(v => videos = v);
// synchronous code!?
expect(videos.length).toBe(4);
expect(videos[0].name).toEqual('Video 0');
expect(videos[1].name).toEqual('Video 1');
expect(videos[2].name).toEqual('Video 2');
expect(videos[3].name).toEqual('Video 3');
}));
});
burada plunker üzerinde tam bir örnek oluşturdu: https://plnkr.co/edit/I3N9zL?p=preview
Bu makaleler yazıldığından beri bir şey değişmiş olmalıdır. Birisi beni bu kırılma değişikliğine işaret edebilir mi? Yoksa önemli bir gerçeği mi özledim?
Testlerin geçirilmesi ve bunların geçerliliğini kaybetmeniz zorunlu olarak yararlı değildir - bir "başarısız" * testini "async" kullanarak alır ve bu çağrıyı kaldırırsanız ne olur? Hala başarısız mı? – jonrsharpe
ilk örnek temel olarak yanlıştır, 'bekliyor (" BU TEST YANLIŞ POZİTİF ") toEqual (false);' asla yeşil olmamalıdır. Kod uyumsuz olarak çalışırsa çalışır. ama artık değil (artık). –
Ben *** mockResponse *** senkronize olduğunu, ancak *** MockConnection *** senkronize görünmüyor. Her sınamaya ikinci bir test ekledim (onu 2 videoya indirdim ve senkronize olanı başarısız oldu ve async geçti). –