tag:crieit.net,2005:https://crieit.net/tags/%E3%83%86%E3%82%B9%E3%83%88/feed 「テスト」の記事 - Crieit Crieitでタグ「テスト」に投稿された最近の記事 2021-04-15T10:16:09+09:00 https://crieit.net/tags/%E3%83%86%E3%82%B9%E3%83%88/feed tag:crieit.net,2005:PublicArticle/16847 2021-04-15T10:16:09+09:00 2021-04-15T10:16:09+09:00 https://crieit.net/posts/5ddd2ccbd317b054d9febd7c8741ded8 テスト <p>テスト</p> kazumawada tag:crieit.net,2005:PublicArticle/15005 2019-05-21T10:48:38+09:00 2019-05-21T10:48:38+09:00 https://crieit.net/posts/Laravel-belongsToMany-Factory LaravelのテストでbelongsToManyのデータをFactoryに作らせる <p>LaravelのFactoryはテストデータ作成がすごく楽で便利。Factoryの定義でリレーションデータも作成するようにしておけば各テストでは一つデータ作成を呼び出すだけでテストができてしまう。</p> <p>hasOneとかのような1:1のリレーション定義の場合はマニュアルに書かれているような方法で自動生成できる。hasManyやbelongsToManyもテスト実行時にはeachとかでデータを追加することはできるが、できれば定義しておいて省略したい。その場合はちょっと処理の追加が必要。</p> <p>具体的にはdefineとは別に、afterCreatingとかで追加データを入れてあげれば良い。たとえばpostsにtagsを割り当てる場合はこんな感じ。</p> <pre><code class="php">$factory->afterCreating(App\Models\Post::class, function ($post, $faker) { $random = rand(1, 3); $tagIds = []; for ($i = 0; $i < $random; $i++) { $tagIds[] = factory(Tag::class)->create()->id; } $post->tags()->sync($tagIds); }); </code></pre> <p>上記は適当に書いたので、動作確認してないけど下記でも良いと思う。</p> <pre><code class="php">$factory->afterCreating(App\Models\Post::class, function ($post, $faker) { $tagIds = factory(Tag::class, rand(1, 3)) ->create() ->map(function ($tag) { return $tag->id; }); $post->tags()->sync($tagIds); }); </code></pre> だら@Crieit開発者 tag:crieit.net,2005:PublicArticle/14860 2019-03-07T23:31:07+09:00 2019-03-17T20:09:42+09:00 https://crieit.net/posts/Mocha-SuperTest-async-await Mocha+SuperTestでasync/awaitを使ってテスト <p>MochaとSuperTestを使ったテストで、async, awaitを使ったところ正しい正確な情報が全然見つからずハマったためメモ。とりあえず作った形はこんな感じ。正しいのかは謎だけど一応正しい場合だけちゃんと通るっぽい。</p> <pre><code class="javascript">describe('/questions', () => { before(async () => { app = await getApp() }) it('GET /:id', async () => { const question = await QuestionFactory.create() return await request(app) .get(`/api/questions/${question.uniqueId}`) .expect(200) .expect(res => { if (!res.body.question) throw new Error('Question not found') if (res.body.question.name != question.name) throw new Error('Question name is not matched') }) }) }) </code></pre> <p>describeにasyncを指定するとおかしくなるので共通処理はbefore等のライフサイクルにて行う。</p> <p>あとrequest+expectの書き方の正解が上手く見つからず悩んだけど、最終的にawaitしてreturnしたら上手く動くようになった。情報を探すとexpectでdoneしろと書いてあるけどどうもうまくいかないっぽい。</p> <p>最初にも書いたけど正しい情報か謎なので、どうしても上手くいかなくて困っているという方がいればお試しを。</p> だら@Crieit開発者 tag:crieit.net,2005:PublicArticle/14494 2018-08-01T13:11:21+09:00 2018-10-17T20:20:16+09:00 https://crieit.net/posts/5099a26dea26cbb725afb45facf12096 一人で新規開発する時テストはどのように書き進めればいいか <p>一人でシステムの新規開発をする場合、どういったタイミングでテストを書きはじめ、どのように書いていけばいいかを考察してみた。ターゲットとしては一人でサービスを開発する個人開発者、スタートアップ等で一人のエンジニアのみで開発を進める場合など。</p> <h2 id="いつから書きはじめるのか"><a href="#%E3%81%84%E3%81%A4%E3%81%8B%E3%82%89%E6%9B%B8%E3%81%8D%E3%81%AF%E3%81%98%E3%82%81%E3%82%8B%E3%81%AE%E3%81%8B">いつから書きはじめるのか</a></h2> <p>「一人で」システムの新規開発をはじめた当初、まずはテストを書き始めるべきではないと思う。</p> <p>なぜかというと、新規開発当初に必要なものというのはシステムの安定性ではないからだ。まだリリースもしておらず、身内に確認してもらうためだけのものにテストを書いて時間を消費するのはもったいない。</p> <p>まずはひたすら開発を行う。闇雲に開発を進めるのではなく、なるべく多くの箇所を網羅できるように、薄く広く開発していく。そうすることで不明点やもっと検討が必要であるべき箇所が見つかり、それを企画サイドの人間に共有することで早めのプラン改善を行うことができる。</p> <p>いきなり丁寧にテストを書きはじめてしまい、だいぶ日数が経過してから大きな問題が見つかり「実は予定していた機能は今の方法では実現できないんだ」なんてことになったら大問題だ。ただでさえ無駄なものを開発することに時間を費やしてしまっているのに、さらにテストを書くのにも時間を費やしてしまうことになる。時間はもう二度と取り戻せないのにそんなことをやっている場合ではない。</p> <p>そういった理由でまずはテストを書くべきではない。</p> <h2 id="一人での開発に求められること"><a href="#%E4%B8%80%E4%BA%BA%E3%81%A7%E3%81%AE%E9%96%8B%E7%99%BA%E3%81%AB%E6%B1%82%E3%82%81%E3%82%89%E3%82%8C%E3%82%8B%E3%81%93%E3%81%A8">一人での開発に求められること</a></h2> <p>そもそも一人で開発を行う場合に求められること(もしくは自分で求めること)というのは、単なるプログラム開発だけではない。</p> <p>ちょっと仕様を変えれば格段に開発がしやすくなるのであればそれを企画サイドに提案してみたりすること等も重要だ。こういったことは必須ではないが重要で、開発者一人だけの時にこういった連携や提案を率先してできない場合、トラブルの原因にもなりうる。</p> <p>同様にテストをどう書いていき、どのように時間を節約し、どのようにスムーズな開発を提供できるかというのは一人の場合非常に重要となる。考えることを放棄してむやみにテストを大量に書いていくべきではない。</p> <h2 id="ではどのように書いていけばいいのか"><a href="#%E3%81%A7%E3%81%AF%E3%81%A9%E3%81%AE%E3%82%88%E3%81%86%E3%81%AB%E6%9B%B8%E3%81%84%E3%81%A6%E3%81%84%E3%81%91%E3%81%B0%E3%81%84%E3%81%84%E3%81%AE%E3%81%8B">ではどのように書いていけばいいのか</a></h2> <p>とりあえず一通りの機能はテストなしで作成していくべきだ。問題点や仕様の変更の必要性がある箇所の洗い出しが終わり、ある程度企画サイドとのやり取りも落ち着いてきた時期に、リリースに向けてどんどん書いていくべきだと思う。</p> <p>一応「一人で」という体にはなっているが、複数人の時でも考えることは放棄せず一応方針は決めたほうがいいと思う。人数が多い時は最初からテストを書いていった方が望ましい場合は多いかもしれないし、2,3人の時は書かない方がいいかもしれなし、書いた方がいいかもしれない。</p> <p>まずはその都度その状況において、書くこと、書かないことのデメリットを必ず検討してみよう。</p> だら@Crieit開発者 tag:crieit.net,2005:PublicArticle/14470 2018-06-17T21:27:11+09:00 2018-10-26T21:30:15+09:00 https://crieit.net/posts/5b7cc4e0b494d9a7015f8925e57b64d3 コメントテスト <p>コメントテストです。どなたでも自由にコメントしてください。</p> だら@Crieit開発者