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