{"id":391,"date":"2023-01-30T05:00:00","date_gmt":"2023-01-30T13:00:00","guid":{"rendered":"https:\/\/www.angulartraining.com\/daily-newsletter\/?p=391"},"modified":"2023-01-27T11:13:24","modified_gmt":"2023-01-27T19:13:24","slug":"how-to-use-mock-data-in-your-angular-application","status":"publish","type":"post","link":"https:\/\/www.angulartraining.com\/daily-newsletter\/how-to-use-mock-data-in-your-angular-application\/","title":{"rendered":"How to use mock data in your Angular application?"},"content":{"rendered":"\n<p>Our last newsletter covered <a href=\"https:\/\/www.angulartraining.com\/daily-newsletter\/how-to-generate-mock-data-for-my-application\/\" target=\"_blank\" rel=\"noopener\" title=\"\">how to generate mock data for our Angular applications<\/a> with Mockaroo.<\/p>\n\n\n\n<p>Today, we&#8217;ll cover how to use that data in our apps so it can:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Act as a temporary backend implementation so you can build your Angular components before the backend API is ready.<\/li>\n\n\n\n<li>Use that data as mocks for your unit tests.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Using hard-coded data in our Angular apps<\/h2>\n\n\n\n<p>Let&#8217;s say we need to display a list of users in a component, but the backend doesn&#8217;t have that data ready yet, or we want to try it with fake data. We head to Mockaroo, generate a JSON file with 100 users, and then copy-paste that JSON string and assign it to a constant in our code (<a href=\"https:\/\/stackblitz.com\/edit\/mock-data-demo?file=src%2Fapp%2Fusers.mock.ts,src%2Fapp%2Fuser.type.ts\" target=\"_blank\" rel=\"noopener\" title=\"\">example here<\/a> &#8211; all links in the rest of this post go to the source code of the mentioned file as well):<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"670\" height=\"255\" src=\"https:\/\/www.angulartraining.com\/daily-newsletter\/wp-content\/uploads\/2023\/01\/image-12.png\" alt=\"\" class=\"wp-image-393\" srcset=\"https:\/\/www.angulartraining.com\/daily-newsletter\/wp-content\/uploads\/2023\/01\/image-12.png 670w, https:\/\/www.angulartraining.com\/daily-newsletter\/wp-content\/uploads\/2023\/01\/image-12-300x114.png 300w\" sizes=\"auto, (max-width: 670px) 100vw, 670px\" \/><\/figure>\n<\/div>\n\n\n<p>Then we want to access that data using a service. We already have a <a href=\"https:\/\/stackblitz.com\/edit\/mock-data-demo?file=src%2Fapp%2Fuser.service.ts\" target=\"_blank\" rel=\"noopener\" title=\"\"><code>UserService<\/code><\/a> that&#8217;s using our backend, but we want to replace that call with our fake data:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"555\" height=\"253\" src=\"https:\/\/www.angulartraining.com\/daily-newsletter\/wp-content\/uploads\/2023\/01\/image-13.png\" alt=\"\" class=\"wp-image-394\" srcset=\"https:\/\/www.angulartraining.com\/daily-newsletter\/wp-content\/uploads\/2023\/01\/image-13.png 555w, https:\/\/www.angulartraining.com\/daily-newsletter\/wp-content\/uploads\/2023\/01\/image-13-300x137.png 300w\" sizes=\"auto, (max-width: 555px) 100vw, 555px\" \/><\/figure>\n<\/div>\n\n\n<p>So we generate a new <a href=\"https:\/\/stackblitz.com\/edit\/mock-data-demo?file=src%2Fapp%2Ffake-user.service.ts\" target=\"_blank\" rel=\"noopener\" title=\"\">FakeUserService<\/a> that has the same shape as <code>UserService<\/code>, but is returning a custom Observable of our mock data instead of making an HTTP request:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"321\" height=\"228\" src=\"https:\/\/www.angulartraining.com\/daily-newsletter\/wp-content\/uploads\/2023\/01\/image-14.png\" alt=\"\" class=\"wp-image-396\" srcset=\"https:\/\/www.angulartraining.com\/daily-newsletter\/wp-content\/uploads\/2023\/01\/image-14.png 321w, https:\/\/www.angulartraining.com\/daily-newsletter\/wp-content\/uploads\/2023\/01\/image-14-300x213.png 300w\" sizes=\"auto, (max-width: 321px) 100vw, 321px\" \/><\/figure>\n<\/div>\n\n\n<p>Finally, we change the dependency injection configuration in our <code><a href=\"https:\/\/stackblitz.com\/edit\/mock-data-demo?file=src%2Fapp%2Fapp.module.ts\" target=\"_blank\" rel=\"noopener\" title=\"\">AppModule<\/a><\/code> so that the application uses <code>FakeUserService<\/code> instead of <code>UserService<\/code>:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"603\" height=\"174\" src=\"https:\/\/www.angulartraining.com\/daily-newsletter\/wp-content\/uploads\/2023\/01\/image-15.png\" alt=\"\" class=\"wp-image-397\" srcset=\"https:\/\/www.angulartraining.com\/daily-newsletter\/wp-content\/uploads\/2023\/01\/image-15.png 603w, https:\/\/www.angulartraining.com\/daily-newsletter\/wp-content\/uploads\/2023\/01\/image-15-300x87.png 300w\" sizes=\"auto, (max-width: 603px) 100vw, 603px\" \/><\/figure>\n<\/div>\n\n\n<p>And now, our <code>AppComponent<\/code> believes it&#8217;s using a real <code>UserService<\/code>, but is actually getting a <code>FakeUserService<\/code> from the Angular injector:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"388\" height=\"161\" src=\"https:\/\/www.angulartraining.com\/daily-newsletter\/wp-content\/uploads\/2023\/01\/image-16.png\" alt=\"\" class=\"wp-image-398\" srcset=\"https:\/\/www.angulartraining.com\/daily-newsletter\/wp-content\/uploads\/2023\/01\/image-16.png 388w, https:\/\/www.angulartraining.com\/daily-newsletter\/wp-content\/uploads\/2023\/01\/image-16-300x124.png 300w\" sizes=\"auto, (max-width: 388px) 100vw, 388px\" \/><\/figure>\n<\/div>\n\n\n<p>What&#8217;s nice and clean about that approach is that you don&#8217;t have to change any of your components. The only line of code to change to enable\/disable your mock data is the <code>providers<\/code> config in <code>AppModule<\/code>. That&#8217;s it! You can access the <a href=\"https:\/\/stackblitz.com\/edit\/mock-data-demo?file=src%2Fapp%2Fapp.component.html\" target=\"_blank\" rel=\"noopener\" title=\"\">entire code for this example on Stackblitz<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Using that same hard-coded data in our unit tests<\/h2>\n\n\n\n<p>Once you follow the above approach, using that data in your unit tests will be very similar. We can reuse that same <code>FakeUserService<\/code> by configuring the Angular <code>TestBed<\/code> in our unit tests as follows:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"596\" height=\"109\" src=\"https:\/\/www.angulartraining.com\/daily-newsletter\/wp-content\/uploads\/2023\/01\/image-17.png\" alt=\"\" class=\"wp-image-399\" srcset=\"https:\/\/www.angulartraining.com\/daily-newsletter\/wp-content\/uploads\/2023\/01\/image-17.png 596w, https:\/\/www.angulartraining.com\/daily-newsletter\/wp-content\/uploads\/2023\/01\/image-17-300x55.png 300w\" sizes=\"auto, (max-width: 596px) 100vw, 596px\" \/><\/figure>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>Our last newsletter covered how to generate mock data for our Angular applications with Mockaroo. Today, we&#8217;ll cover how to use that data in our apps so it can: Using hard-coded data in our Angular apps Let&#8217;s say we need to display a list of users in a component, but the backend doesn&#8217;t have that [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[19,17],"tags":[],"class_list":["post-391","post","type-post","status-publish","format-standard","hentry","category-testing","category-tools"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.angulartraining.com\/daily-newsletter\/wp-json\/wp\/v2\/posts\/391","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.angulartraining.com\/daily-newsletter\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.angulartraining.com\/daily-newsletter\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.angulartraining.com\/daily-newsletter\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.angulartraining.com\/daily-newsletter\/wp-json\/wp\/v2\/comments?post=391"}],"version-history":[{"count":4,"href":"https:\/\/www.angulartraining.com\/daily-newsletter\/wp-json\/wp\/v2\/posts\/391\/revisions"}],"predecessor-version":[{"id":402,"href":"https:\/\/www.angulartraining.com\/daily-newsletter\/wp-json\/wp\/v2\/posts\/391\/revisions\/402"}],"wp:attachment":[{"href":"https:\/\/www.angulartraining.com\/daily-newsletter\/wp-json\/wp\/v2\/media?parent=391"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.angulartraining.com\/daily-newsletter\/wp-json\/wp\/v2\/categories?post=391"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.angulartraining.com\/daily-newsletter\/wp-json\/wp\/v2\/tags?post=391"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}