LoginSignup
0
3

More than 3 years have passed since last update.

Rails6+Reactで付箋アプリっぽいページを作ってみた。(テスト編)

Last updated at Posted at 2020-05-15

この記事について

付箋アプリっぽいページの作成過程で作ったモデルのテストコードをある程度記載しておくものです。

関連する記事

書いているうちに分量がすごくなって記事を分割したので、リンク先をまとめておきます。
その1(環境構築〜モデル作成編)
その2(API作成編)
その3(UI作成編1)
その4(UI作成編2)
おまけ(モデルのテスト編)

モデルができたら。。。テストでしょ?

Railsでアプリを作るうえで、最も大切なこと。
多分、テストの作成です。
自動化されたテストを作成しておかないと、後々痛い目に逢いました。(過去形。。)
ので、テスト内容を記載させていただきます。

Fixture

Fixtureはテストデータですね。
ユーザは3人(今回は未アサインタスクを保持させるためにnotassignedさんにも仲間に入ってもらいました。)分用意しました。

test/fixtures/users.yml
notassigned:
  name: Not Assigned

alice:
  name: Alice

bob:
  name: Bob

タスクは2つほど用意しました。
関連付けがあるので、ユーザのfixtureで使った名前をそのまま使えます。(これすごい。)

test/fixtures/tasks.yml
task1:
  title: Task001
  description: Description 0001
  due_date: 2020-05-01 10:03:32
  user: notassigned

task2:
  title: Task002
  description: Description 0002
  due_date: 2020-05-01 10:03:32
  user: alice

テストの作成

タスクモデルのテスト

こちらは、以下の確認ができれば良いかな、とテストを作成しました。
・誰にもアサインされないタスクが作れないこと。
・誰かにアサインすればタスクが作れること。
・アサイン先を切り替えられること

test/models/task_test.rb
## 以下のようなテストを追加しました。
  # ユーザを指定しないタスクは保存できない。
  test "Not assinged task should fail to create" do
    new_task = Task.new(title: "test001", description: "hoge", due_date: Date.new(2020,5,1));
    assert_raises(ActiveRecord::RecordInvalid) do
      new_task.save!
    end
  end

  # ユーザを指定すると保存できる。
  test "Assinged task should success to create" do
    user = users(:notassigned);
    new_task = Task.new(title: "test001", description: "hoge", due_date: Date.new(2020,5,1), user: user);
    assert_nothing_raised do
      new_task.save!
    end
  end

  # アサイン先を変更できる。
  test "task's owner can be changed to another user" do
    bob = users(:bob);
    assert_difference('bob.tasks.count') do 
      target = tasks(:task2);
      target.user = bob;
      target.save!;
      bob.tasks.reload;
    end
  end

ユーザモデルのテスト

こちらは以下について確認してみました。
・初期状態のユーザはタスクを持たない。(タスクを持たないユーザを作成できる)
・タスクの入れ替えができる。

test/models/user_test.rb
  test "New User should not have any tasks" do
    user = User.new(name: "hoge hoge");

    assert_nothing_raised do
      user.save!;
    end

    assert_equal(0, user.tasks.count);

  end

  test "Task owner can be changed" do
    bob = users(:bob);
    notassigned = users(:notassigned);
    notassigned_task = notassigned.tasks[0];

    bob.tasks.push(notassigned_task);

    assert_nothing_raised do
      bob.save!;
      notassigned.tasks.reload;
    end

    assert_equal(1, bob.tasks.length);
    assert_equal(0, notassigned.tasks.length);

  end
0
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
3