Rails5 기능 요약

15414 단어 Rails

Model


Active Model


AttributeMethods 모듈


Callbacks 모듈


등록!
실행
건너뛰다
정지하다
관계의 CallBack
조건부 콜백.
CallBackClass
트레이딩 카드
before_validation
after_validation
before_save
around_save
before_create
around_create
after_create
after_save
before_validation
after_validation
before_save
around_save
before_update
around_update
after_update
after_save
before_destroy
around_destroy
after_destroy
after_initialize
after_find
after_touch

Conversion 모듈


Dirty 모듈


Validations 모듈


Ruby on Rails-View
View
Ruby on Rails-Controller
Controller
Ruby on Rails-Debugging
Debugging
Ruby on Rails-API
Rails API Server

Testing


기본적


모든 Rails 애플리케이션에는 세 가지 환경이 있습니다.
각 환경의 데이터베이스 설정config/database.yml에서
  • development
  • test
  • production
  • Fixture

  • YAML에서 설명
  • 특정 DB에 의존하지 않음
  • 모델의 Fixture
  • ERB
  • 사용 가능
  • 테스트용 모든 Fixture 자동 읽기
  • users.yml
    # Sample Fixture
    david:
      name: David Heinemeier Hansson
      birthday: 1979-10-15
      profession: Systems development
    
    steve:
      name: Steve Ross Kellock
      birthday: 1974-09-27
      profession: guy with keyboard
    
    # belongs_to/has_many関連付けの場合
    # fixtures/categories.ymlの内容:
    about:
      name: About
    
    # fixtures/articles.ymlの内容
    one:
      title: Welcome to Rails!
      body: Hello world!
      category: about
    
    # ERBを使用した場合
    <% 1000.times do |n| %>
    user_<%= n %>:
      username: <%= "user#{n}" %>
      email: <%= "user#{n}@example.com" %>
    <% end %>
    

    Model 유닛 테스트

  • 한 값이 다른 값과 같은지 여부
  • 이 대상이 nil
  • 인지 여부
  • 코드의 이 줄에 예외가 발생했는지 여부
  • 사용자의 암호가 5자 이상인지 여부
  • test_helper.rb에 추가된 방법은 모든 테스트에서 사용 가능
  • 테스트를 수행하려면 최신 상태로 테스트 DB
  • 를 구성해야 합니다.
  • 모든migration이 완료된 경우 db/schema.rb 또는 db/structure.sql를 테스트 DB
  • 에 읽기
  • 테스트 경로:.(점)
  • 테스트 실패: F
  • 오류 발생: E
  • TDD
  • assertion
  • 에도 Rails 고유의 assertion
  • 이 있습니다.
    article_test.rb
    # ActiveSupport::TestCaseのすべてのメソッドを利用できる
    # ActiveSupport::TestCaseのスーパークラスはMinitest::Test
    class ArticleTest < ActiveSupport::TestCase
    end
    

    Controller 기능 테스트

  • 웹 요청의 성공 여부
  • 올바른 페이지로 리디렉션 여부
  • 사용자 인증 성공 여부
  • 응답 템플릿에 올바른 객체가 저장되어 있는지 여부
  • 시야에 표시되는 메시지가 적절한지 여부
  • get 방법으로 전달된

  • 컨트롤러 내의 동작(동작 이름은 문자열 또는 기호)
  • 요청 매개 변수에 포함된 선택할 수 있는 산열 (검색 문자열 매개 변수나 글 변수 등)
  • 요청에 전달된 세션 변수의 옵션 해시 1개
  • flash 메시지의 값을 선택할 수 있는 산열 1개
  • get과post를 사용하면 사용할 수 있는 산열

  • assigns-보기에서 사용하는 동작 실례 변수의 모든 대상으로 저장합니다.
  • cookies - 설정된 모든 cookies.
  • flash-flash 내의 모든 대상.
  • session - 세션 변수에 포함된 모든 객체
  • 사용 가능한 인스턴스 변수


  • @controller - 요청을 처리하는 컨트롤러

  • @request - 요청

  • @response - 응답
  • HTTP, 머리글 및 CGI 변수 설정하기

    # HTTPヘッダーを設定する
    @request.headers["Accept"] = "text/plain, text/html"
    get :index
    
    # CGI変数を設定する
    @request.headers["HTTP_REFERER"] = "http://example.com/home"
    post :create
    

    템플릿 및 레이아웃이 올바른지 여부

  • assert_template 한 번 호출은 템플릿과 레이아웃을 동시에 테스트할 수 없음
  • 부분적(부분적 배치)을 사용하는 경우에도 부분적 결단이 필요하다
  • test "index should render correct template and layout" do
      get :index
      assert_template :index
      assert_template layout: "layouts/application"
      assert_template layout: "layouts/application", partial: "_form"
    end
    

    View 테스트

  • assert_select(선택기, [조건], [메시지])
  • assert_select(요소, 선택기, 조건, 메시지)
  • 블록 사용 가능
  • assert_select
  • assert_select "ol" do |elements|
      elements.each do |element|
        assert_select element, "li", 4
      end
    end
    
    assert_select "ol" do
      assert_select "li", 8
    end
    

    Integration test

  • 여러 컨트롤러 간 스위칭 테스트
  • Action Dispatch:IntegrationTest에서 상속
  • Setup 및 Teardown


    Callbacks에 설치
      # 各テストが実行される直前に呼び出される
      def setup
        @article = articles(:one)
      end
    
      # 各テストの実行直後に呼び出される
      def teardown
        # @article変数は実際にはテストの実行のたびに直前で初期化されるので
        # ここで値をnilにする意味は実際にはないのですが、
        # teardownメソッドの動作を理解いただくためにこのようにしています
        @article = nil
      end
    

    Routing

    test "should route to article" do
      assert_routing '/articles/1', {controller: "articles", action: "show", id: "1"}
    end
    

    Mailer

  • 메일이 처리됨(생성 및 발송)
  • 메일의 내용(subject,sender,body 등)이 정확
  • 적당한 시간에 적당한 메일을 발송
  • 비교 결과 출력 및 Fixture
  • Unit test

    # inviteというアクションで知人に招待状を送信するUserMailerという名前のメイラー
    require 'test_helper'
    
    class UserMailerTest < ActionMailer::TestCase
      test "invite" do
        # メールを送信後キューに追加されるかどうかをテスト
        email = UserMailer.create_invite('[email protected]',
                                         '[email protected]', Time.now).deliver_now
        assert_not ActionMailer::Base.deliveries.empty?
    
        # 送信されたメールの本文が期待どおりの内容であるかどうかをテスト
        assert_equal ['[email protected]'], email.from
        assert_equal ['[email protected]'], email.to
        assert_equal 'You have been invited by [email protected]', email.subject
        assert_equal read_fixture('invite').join, email.body.to_s
      end
    end
    

    Functional test


    메일 배달 방법을 호출하여 그 결과가 배달 목록에 적절한지 확인하다
    원하는 시간에 메일을 보낼지 여부
    require 'test_helper'
    
    class UserControllerTest < ActionController::TestCase
      test "invite friend" do
        assert_difference 'ActionMailer::Base.deliveries.size', +1 do
          post :invite_friend, email: '[email protected]'
        end
        invite_email = ActionMailer::Base.deliveries.last
    
        assert_equal "You have been invited by [email protected]", invite_email.subject
        assert_equal '[email protected]', invite_email.to[0]
        assert_match(/Hi [email protected]/, invite_email.body.to_s)
      end
    end
    

    Helper


    Assistant 메서드의 출력이 예상과 일치하는지 확인
    class UserHelperTest < ActionView::TestCase
      include UserHelper
    
      test "should return the user name" do
        # ...
      end
    end
    
    Ruby on Rails-Deploy
    Capistrano

    좋은 웹페이지 즐겨찾기