發表文章

目前顯示的是 九月, 2018的文章

[筆記] 如何在 Laravel 測試中使用 Faker

圖片
是這樣的,我想在 Test 中產生一些假資料丟給 Service method 跑,於是很直覺地想到了 Faker 這個很棒很方便的東西。一般我們使用 Faker 是 搭配 Model Factory 使用。但是我這次只是想產生個簡單的假資料,跟我的資料庫或 Model 都沒有關係,有沒有辦法?只是放一個封面圖隆重介紹:WithFaker traitLaravel 從 5.5.24 版開始 已經內建了這個 trait,而且在你使用 artisan 指令建立測試檔案時就會自動幫你導入命名空間了:useIlluminate\Foundation\Testing\WithFaker;結果到現在已經 5.7 版了,竟然還沒有在教學文件出現過。可以自行參考 Laravel API 文件。如何使用 WithFaker現在只需使用 trait 在你的測試類別上,例如:# tests/Unit/ExampleTest.php// 上略classExampleTestextendsTestCase{useWithFaker;// 下略接著就可以透過 $this->faker 來操作 Faker 了,例如:echo$this->faker->name;// 'Lucy Cechtelar';echo$this->faker->address;// "426 Jordy Lodge// Cartwrightshire, SC 88120-6700"echo$this->faker->text;// Dolores sit sint laboriosam dolorem culpa et autem. Beatae nam sunt fugit// et sit et mollitia sed.// Fuga deserunt tempora facere magni omnis. Omnis quia temporibus laudantium// sit minima sint.是不是非常簡單呢?參考資料Laravel - How to use faker in PHPUnit test? - Stack OverflowLaravel Changelog 在 Twitter:laravel 5.5.24 …
由於 Google+ 留言系統近期不會正常推送通知,請改用下方 DISQUS 留言,謝謝!

[筆記] Faker 如何產生 10 位數以上的 random number?

在寫 Laravel 測試需要的 Factory 時,有個欄位需要 16 位數以下的數字。一般來說直接透過 fzaninotto/Faker 的 randomNumber 就可以很方便的生成了:$number=$faker->randomNumber(16);結果執行的時候竟然噴錯了!InvalidArgumentException: randomNumber() can only generate numbers up to mt_getrandmax()mt_getrandmax() 是什麼錯誤訊息中提到的 mt_getrandmax() 是 PHP 的內建函式,會回傳 PHP 透過 mt_rand() 可以產生的最大數。這個 mt_rand() 就是一般的隨機產生函式,只要有指定 min 和 max,其實他是可以產生更大數的,不是很理解為什麼 Faker 沒有做這個處理。可以怎麼做?這裡我想了幾個方法,可以給各位參考。方法一:直接使用 mt_rand 或 random_int既然他背後是使用 mt_rand(),那就直接使用它吧。$number=mt_rand(1,9999999999999999);不過我實際使用發現,雖然我是只有上限給了 16 位數,他產生的結果好像是固定十六位數。後來嘗試了 PHP 7 新的 random_int,結果差不多。$number=random_int(1,9999999999999999);PHP 官網文件在 mt_getrandmax 的頁面上有提及,如果提供 MAX 給 mt_rand 會減少隨機性,不知道是不是這個原因。方法二:使用 numberBetweenFaker 有提供 numberBetween,所以可以直接使用:$number=$faker->numberBetween(1,9999999999999999);因為 numberBetween 也是基於 mt_rand,我實測結果好像只比 mt_rand 好一點。以上兩個方法如果有人知道如何修正,再麻煩留言跟我說一下。方法三:使用 numerify這個是 Faker 作者在 類似的 issue 裡提出的做法,我把它替換成這個情境的解法。numerify 是 Faker 的另一個函式,可以在字串的指定位置裡塞入數字。官方範例:numerify(&…

[筆記] 設定了 POWERLEVEL9K_MODE 卻沒顯示圖示?

圖片
裝了 Oh My Zsh 後,應該很自然地都會想要裝上 Powerlevel9k 吧(咦?
然後也會很自然地想要把圖示通通都打開對吧(咦咦?這時候就會發現,奇怪我都已經照官方教學把 POWERLEVEL9K_MODE 設定的妥妥了(順便曬一下我陽春的 Powerlevel9k 設定):# ~/.zshrc POWERLEVEL9K_MODE='nerdfont-complete' POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(os_icon context virtualenv dir vcs) POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(status root_indicator background_jobs time) POWERLEVEL9K_SHORTEN_DIR_LENGTH=2 POWERLEVEL9K_CONTEXT_TEMPLATE="%n" POWERLEVEL9K_PROMPT_ON_NEWLINE=true POWERLEVEL9K_RPROMPT_ON_NEWLINE=false 怎麼還是沒有圖勒
我意思是,像下面官方示範的各種精美圖示,怎麼還是沒有出來勒?
原來是 官方 Wiki 安裝說明 針對 Nerd-Fonts 的段落忘記強調一句話,而在 Awesome-Powerline Fonts 段落有提及:You then need to indicate that you wish to use the additional glyphs by defining one of the following in your ~/.zshrcbefore you specify the powerlevel9k theme意思是,POWERLEVEL9K_MODE必須要比 ZSH_THEME 還前面啦!以我的例子為例,只要把POWERLEVEL9K_MODE='nerdfont-complete'這一行往前搬,像這樣:POWERLEVEL9K_MODE='nerdfont-complete' ZSH_THEME="powerlevel9k/powerlevel9k"現在圖示就正常顯示啦!