経験の浅い開発者なりに、テストコードが存在しないプロダクトの原因を書き出して見ました。
こうやってスライドにして、整理していくと、自分の思考も整理されますね
経験の浅い開発者なりに、テストコードが存在しないプロダクトの原因を書き出して見ました。
こうやってスライドにして、整理していくと、自分の思考も整理されますね
元記事は自分がQiitaであげた記事
・現PHPエンジニア(1年弱)
・Railsエンジニア転向のため、TechAcademyのRails講座を1ヶ月受講
・現在Railsで個人開発中
・個人開発でわからないことが続出、調べながら何とか進めています。
APIを叩いて外部サービスの時刻を取得するのだが、日本のタイムゾーン(JST)ではなく、UTC(協定世界時)で取得するので、困った。 結論として、config/application.rbにタイムゾーンの設定を書く。
require_relative 'boot' require "rails" # Pick the frameworks you want: require "active_model/railtie" require "active_job/railtie" require "active_record/railtie" require "action_controller/railtie" require "action_mailer/railtie" require "action_view/railtie" require "action_cable/engine" require "sprockets/railtie" Bundler.require(*Rails.groups) module Typetalks class Application < Rails::Application config.time_zone = 'Tokyo' end end
UTC => JSTに変換するときは、下記のよう"in_time_zone"関数を使う。
date = "2017-05-18T04:07:54Z" p data #2017-05-18T04:07:54Z p data.in_time_zone #Thu, 18 May 2017 13:07:54 JST +09:00
開発環境でDBを初期化してやり直したい時がある。 そういうときは以下のコマンドを実行する。
$ rails db:reset
ケースによってはmigrateファイルからテーブル作成を行いたい場合もあるだろう。 そのような場合は下記のコマンドを実行する。
$rails db:migrate:reset
最初はcontrollerやmodelの先頭に書いていたが、何回も同じことを書くのは面倒なので、 config/initializers/stdlibs.rbで一括管理する。
require 'net/https' require 'uri' require 'json' require 'time'
元記事は自分がQiitaに書いたもの
$ git diff [ブランチ名A] [ブランチ名B]
使用例
$ git diff master develop
ブランチAの方がBより古い扱いで差分が表示される。
$ git diff origin/dvelop fix_routes
リモートブランチのdevelopとローカルのfix_routesを比較する。
$ git diff master develop --shortstat 7 files changed, 502 insertions(+), 1 deletion(-)
オプション"--shortstat"をつけると、ブランチ間の更新行数を比較できる。
--name-only
オプションを使用する。
$ git diff --name-only
今更ながら、一番簡素なPHPUnitの導入メモ
ちなみに参考資料は「PHP逆引きレシピ 第2版」です。
PHP逆引きレシピ 第2版 (PROGRAMMER’S RECiPE)
ルートディレクトリにcomposer.jsonを以下のような内容で配置。
参考資料ではdbunitやphpunit-seleniumの説明なしにいきなりサンプルコードが記載されいているが、
よくわからないまま進むのも気持ち悪いので、少し補完。
dbunitは、テスト用のDBを作成してくれるツール。
phpunit-seleniumはブラウザテストのツール
PHPでブラウザテストの自動化! Facebookの作ったツール「php-webdriver」で人生がときめく (サンプルコード付き) - コネヒト開発者ブログ
composer.json
{ "require-dev": { "phpunit/phpunit": "3.7.*", "phpunit/dbunit": ">=1.2", "phpunit/phpunit-selenium": ">=1.2" } }
$ composer install
テストされるclass
lib/User.php
<?php class User { public $name; public function __construct($name) { $this->name = $name; } public function createMessage() { return "こんにちは、{$this->name}さん!"; } }
テスト実行class
UserTest.php
<?php require_once __DIR__ . 'lib/User.php'; // "PHPUnit_Framework_TestCase"を継承してテスト用のクラスを作成 class UserTest extends PHPUnit_Framework_TestCase { // User->nameが佐藤になっているか確認するテスト public function testVar() { // Userインスタンス生成 $user = new User('佐藤'); // $user->nameが'佐藤'とイコールか確認する。 $this->assertEquals('佐藤', $user->name); } public function testメッセージ作成() //エラーメッセージがわかりやすいように関数名を日本語にした。 { $user = new User('河合'); $test = $user->createMessage(); $expected = 'こんにちは、河合さん!'; // $createMessage();の結果が、'こんにちは、河合さん'になってるか確認する $this->assertEquals($expected, $test); } }
実行
$ ./vendor/bin/phpunit UserTest.php ] /work/www/src/lib/User.phpPHPUnit 3.7.38 by Sebastian Bergmann. Time: 432 ms, Memory: 3.25MB
仮に「testメッセージ作成」関数が失敗した場合、下記が出力される。
There was 1 failure: 1) UserTest::testメッセージ作成 Failed asserting that two strings are equal. --- Expected +++ Actual @@ @@ -'こんにちは、河合さん!' +'こんにちは、さん!' /work/www/src/UserTest.php:26 FAILURES! Tests: 2, Assertions: 2, Failures: 1.
このように、functionの名前は日本語で記述したほうがわかりやすい場合もある
.F <------ "."は成功、"F"はFail(失敗)"E"はPHPError