tag:crieit.net,2005:https://crieit.net/tags/test/feed 「test」の記事 - Crieit Crieitでタグ「test」に投稿された最近の記事 2023-10-14T18:00:21+09:00 https://crieit.net/tags/test/feed tag:crieit.net,2005:PublicArticle/18614 2023-10-14T17:59:39+09:00 2023-10-14T18:00:21+09:00 https://crieit.net/posts/test-652a587b8ca5b test <p>test222</p> ymdkysk tag:crieit.net,2005:PublicArticle/17842 2021-12-10T17:35:56+09:00 2021-12-10T17:35:56+09:00 https://crieit.net/posts/test-post test post <h1 id="hello"><a href="#hello">hello</a></h1> <p>test messages<br /> <img src="https://www.shutterstock.com/ja/image-photo/cloud-shaped-like-bird-flight-141608782" alt="image" /></p> <h2 id="helolo2"><a href="#helolo2">helolo2</a></h2> <h1 id="hello 2"><a href="#hello+2">hello 2</a></h1> <pre><code>javascript code </code></pre> markdog tag:crieit.net,2005:PublicArticle/16723 2021-03-08T01:51:05+09:00 2021-03-08T01:51:05+09:00 https://crieit.net/posts/jest-private-readonly-mock 📝 Jest で private readonly な値をモックする方法 <h1 id="はじめに"><a href="#%E3%81%AF%E3%81%98%E3%82%81%E3%81%AB">はじめに</a></h1> <p>Jest でクラスの <code>private readonly</code> な変数を差し替えたい時に若干引っかかったのでメモっておきます。タイトルでは Jest とありますが、本記事の内容は JavaScript でモックする際の有効な手法の 1 つとして利用することが可能です。</p> <h1 id="Object.defineProperty を利用して値を差し替える"><a href="#Object.defineProperty+%E3%82%92%E5%88%A9%E7%94%A8%E3%81%97%E3%81%A6%E5%80%A4%E3%82%92%E5%B7%AE%E3%81%97%E6%9B%BF%E3%81%88%E3%82%8B">Object.defineProperty を利用して値を差し替える</a></h1> <p>結論から言うと変数を差し替えたい場合は下記のような記述になります。</p> <pre><code class="javascript">const mockValue = ""; Object.defineProperty(service, "privateReadOnlyValue", { value: mockValue, }); </code></pre> <p>ちなみに関数を差し替えたい場合は下記のような記述になります。</p> <pre><code class="javascript">Object.defineProperty(service, "privateSumFunction", { value: jest.fn((a, b) => a + b), }); </code></pre> <p>各種テストケースで使いまわしているインスタンスの <code>private readonly</code> な変数をモックした場合、値をリストアしたいケースも出てきました。その場合の記述としては、下記が有効でした。</p> <pre><code class="javascript">// tmpService 変数に service インスタンスを clone して利用する const tmpService = Object.create(service); Object.defineProperty(tmpService, "privateReadOnlyValue", { value: "", }); </code></pre> <h1 id="おわりに"><a href="#%E3%81%8A%E3%82%8F%E3%82%8A%E3%81%AB">おわりに</a></h1> <p><code>Object.defineProperty</code> と <code>Object.create</code> を駆使すれば大体のケースでは事足りそうです。</p> <h1 id="参考リンク"><a href="#%E5%8F%82%E8%80%83%E3%83%AA%E3%83%B3%E3%82%AF">参考リンク</a></h1> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Object/create">Object.create() - JavaScript | MDN</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://github.com/facebook/jest/issues/2227#issuecomment-265005782">Mocking read-only properties for a class · Issue #2227 · facebook/jest</a></li> </ul> nikaera tag:crieit.net,2005:PublicArticle/14996 2019-05-19T08:01:13+09:00 2019-05-19T08:01:13+09:00 https://crieit.net/posts/test-5ce08eb977dd8 test <p>test</p> C@RLO