Do I need async block when testing a code which returns an Observable
I have written the following spec
which tests sendMessage
function. sendMessage
sends a post
message and returns an Observable<HttpEvent<any>>
. So far I have not used async
and the test case is getting passed. I am wondering if this is the right way to code the spec
or should I use async
(because there might be a race condition which isn't happening at the moment, making my test case pass)
fit('should return HttpEvent of type HttpResponse',()=>{ //should I change this to async block and use whenStable to wait for the Observable
//create our expectation what should be returned by the sendMessage. It should return Observable<HttpEvent<any>>
const responseData = { result: 'success', ['additional-info']: 'some data from server' };
let httpEvent:HttpResponse<any> = new HttpResponse<any>({body:responseData});
let helperService = TestBed.get(HelperService);//extract helper service
let httpMock = TestBed.get(HttpTestingController);
//call the sendMessage function and subscribe to its observable.
let result:Observable<HttpEvent<any>> = helperService.sendMessage('/someURL','someBody',httpOptions);
let subscription = result.subscribe((event:HttpEvent<any>)=>{
console.log('got response ',event);
//I want to test that sendMessage returns HttpEvent of type Response
expect(event).toBeTruthy();
let isResponseType0 = (event.type === 0);
let isResponseTypeResponse = (event.type === HttpEventType.Response);
expect(isResponseType0 || isResponseTypeResponse).toEqual(true);
});
//Below, TestRequest is a mock request that was received and is ready to be answered.
const mockReq:TestRequest = httpMock.expectOne('/someURL'); //Expect that a single request has been made which matches the given URL, and return its mock
console.log('mock request is ',mockReq);
expect(mockReq.cancelled).toBeFalsy();
expect(mockReq.request.responseType).toEqual('json');
//once mocking of sending request is done, mock receiving a response. This will trigger the logic inside subscribe function
mockReq.flush(httpEvent); //flush method provides dummy values as response
httpMock.verify();//verify checks that there are no outstanding requests;
});
});
angular6
add a comment |
I have written the following spec
which tests sendMessage
function. sendMessage
sends a post
message and returns an Observable<HttpEvent<any>>
. So far I have not used async
and the test case is getting passed. I am wondering if this is the right way to code the spec
or should I use async
(because there might be a race condition which isn't happening at the moment, making my test case pass)
fit('should return HttpEvent of type HttpResponse',()=>{ //should I change this to async block and use whenStable to wait for the Observable
//create our expectation what should be returned by the sendMessage. It should return Observable<HttpEvent<any>>
const responseData = { result: 'success', ['additional-info']: 'some data from server' };
let httpEvent:HttpResponse<any> = new HttpResponse<any>({body:responseData});
let helperService = TestBed.get(HelperService);//extract helper service
let httpMock = TestBed.get(HttpTestingController);
//call the sendMessage function and subscribe to its observable.
let result:Observable<HttpEvent<any>> = helperService.sendMessage('/someURL','someBody',httpOptions);
let subscription = result.subscribe((event:HttpEvent<any>)=>{
console.log('got response ',event);
//I want to test that sendMessage returns HttpEvent of type Response
expect(event).toBeTruthy();
let isResponseType0 = (event.type === 0);
let isResponseTypeResponse = (event.type === HttpEventType.Response);
expect(isResponseType0 || isResponseTypeResponse).toEqual(true);
});
//Below, TestRequest is a mock request that was received and is ready to be answered.
const mockReq:TestRequest = httpMock.expectOne('/someURL'); //Expect that a single request has been made which matches the given URL, and return its mock
console.log('mock request is ',mockReq);
expect(mockReq.cancelled).toBeFalsy();
expect(mockReq.request.responseType).toEqual('json');
//once mocking of sending request is done, mock receiving a response. This will trigger the logic inside subscribe function
mockReq.flush(httpEvent); //flush method provides dummy values as response
httpMock.verify();//verify checks that there are no outstanding requests;
});
});
angular6
add a comment |
I have written the following spec
which tests sendMessage
function. sendMessage
sends a post
message and returns an Observable<HttpEvent<any>>
. So far I have not used async
and the test case is getting passed. I am wondering if this is the right way to code the spec
or should I use async
(because there might be a race condition which isn't happening at the moment, making my test case pass)
fit('should return HttpEvent of type HttpResponse',()=>{ //should I change this to async block and use whenStable to wait for the Observable
//create our expectation what should be returned by the sendMessage. It should return Observable<HttpEvent<any>>
const responseData = { result: 'success', ['additional-info']: 'some data from server' };
let httpEvent:HttpResponse<any> = new HttpResponse<any>({body:responseData});
let helperService = TestBed.get(HelperService);//extract helper service
let httpMock = TestBed.get(HttpTestingController);
//call the sendMessage function and subscribe to its observable.
let result:Observable<HttpEvent<any>> = helperService.sendMessage('/someURL','someBody',httpOptions);
let subscription = result.subscribe((event:HttpEvent<any>)=>{
console.log('got response ',event);
//I want to test that sendMessage returns HttpEvent of type Response
expect(event).toBeTruthy();
let isResponseType0 = (event.type === 0);
let isResponseTypeResponse = (event.type === HttpEventType.Response);
expect(isResponseType0 || isResponseTypeResponse).toEqual(true);
});
//Below, TestRequest is a mock request that was received and is ready to be answered.
const mockReq:TestRequest = httpMock.expectOne('/someURL'); //Expect that a single request has been made which matches the given URL, and return its mock
console.log('mock request is ',mockReq);
expect(mockReq.cancelled).toBeFalsy();
expect(mockReq.request.responseType).toEqual('json');
//once mocking of sending request is done, mock receiving a response. This will trigger the logic inside subscribe function
mockReq.flush(httpEvent); //flush method provides dummy values as response
httpMock.verify();//verify checks that there are no outstanding requests;
});
});
angular6
I have written the following spec
which tests sendMessage
function. sendMessage
sends a post
message and returns an Observable<HttpEvent<any>>
. So far I have not used async
and the test case is getting passed. I am wondering if this is the right way to code the spec
or should I use async
(because there might be a race condition which isn't happening at the moment, making my test case pass)
fit('should return HttpEvent of type HttpResponse',()=>{ //should I change this to async block and use whenStable to wait for the Observable
//create our expectation what should be returned by the sendMessage. It should return Observable<HttpEvent<any>>
const responseData = { result: 'success', ['additional-info']: 'some data from server' };
let httpEvent:HttpResponse<any> = new HttpResponse<any>({body:responseData});
let helperService = TestBed.get(HelperService);//extract helper service
let httpMock = TestBed.get(HttpTestingController);
//call the sendMessage function and subscribe to its observable.
let result:Observable<HttpEvent<any>> = helperService.sendMessage('/someURL','someBody',httpOptions);
let subscription = result.subscribe((event:HttpEvent<any>)=>{
console.log('got response ',event);
//I want to test that sendMessage returns HttpEvent of type Response
expect(event).toBeTruthy();
let isResponseType0 = (event.type === 0);
let isResponseTypeResponse = (event.type === HttpEventType.Response);
expect(isResponseType0 || isResponseTypeResponse).toEqual(true);
});
//Below, TestRequest is a mock request that was received and is ready to be answered.
const mockReq:TestRequest = httpMock.expectOne('/someURL'); //Expect that a single request has been made which matches the given URL, and return its mock
console.log('mock request is ',mockReq);
expect(mockReq.cancelled).toBeFalsy();
expect(mockReq.request.responseType).toEqual('json');
//once mocking of sending request is done, mock receiving a response. This will trigger the logic inside subscribe function
mockReq.flush(httpEvent); //flush method provides dummy values as response
httpMock.verify();//verify checks that there are no outstanding requests;
});
});
angular6
angular6
asked Nov 16 '18 at 5:55
Manu ChadhaManu Chadha
3,40721945
3,40721945
add a comment |
add a comment |
0
active
oldest
votes
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53332203%2fdo-i-need-async-block-when-testing-a-code-which-returns-an-observable%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
0
active
oldest
votes
0
active
oldest
votes
active
oldest
votes
active
oldest
votes
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53332203%2fdo-i-need-async-block-when-testing-a-code-which-returns-an-observable%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown