Rspec 및 Rails로 때 테스트

11284 단어 testingrubyrailsrspec
사진 작성자@estudiobloom
테스트는 모든 응용 프로그램 개발의 중요한 단계이며, 모든 것이 예상대로 실행되도록 확보하는 방식이다.Ruby on Rails 애플리케이션에서 CRUD(생성, 읽기, 업데이트 및 제거) 작업의 성공 여부를 테스트할 수 있습니다.이 문서에서는 RSpec을 사용하여 이를 구현하는 방법에 대해 다룹니다.

RSpec이란?


Rspec은 Ruby에서 가장 자주 사용하는 테스트 도구입니다.비헤이비어 Drive Development Development(BDD)을 위해 작성된 것으로, 테스트는 프로그램의 예상 비헤이비어에 따라 지정되어야 합니다.BDD와 RSpec에 대한 정보를 더 알고 싶다면, 좋은 개요 here 를 찾을 수 있습니다.
RSpec은 모든 Ruby 코드를 테스트할 수 있습니다.이 예에서는 RSpec-Rails를 사용하여 RSpec과 Ruby-on-rails를 확장하여 Rails 응용 프로그램을 전문적으로 테스트할 수 있도록 합니다.

너의 테스트를 실시해라


1. 레일 RSpec 설치


우선 rspec railsgem을 설치해야 합니다.우리는 이렇게 할 수 있다.
  • 포함gem 'rspec-rails', '~> 3.4', '>= 3.4.2'GEM 파일의:development:::test 그룹에서이것은 내 파일의 모습입니다.
  • group :development, :test do
        gem 'byebug', platforms: [:mri, :mingw, :x64_mingw]
        gem 'rspec-rails', '~> 3.4', '>= 3.4.2'
    end
    
    주의: rspec rails gem here 의 최신 버전을 찾을 수 있습니다.
  • 터미널에서 bundle install을 실행하여 GEM 파일에 지정된 GEM을 설치합니다.
  • 실행rails generate rspec:installRSpec 테스트를 실행하는 데 필요한 사양 파일을 생성합니다.이것은 모델, 컨트롤러, 도움말 프로그램을 테스트하는 데 사용되는 파일을 포함하며, 새로 만든 등급 라이브러리 폴더에서 찾을 수 있습니다.
  • 2. 테스트할 실례를 만듭니다


    이러한 예에서는 Song 클래스에 대한 테스트를 작성합니다.모델 디렉터리에 있는song spec.rb 파일에서 이 테스트들을 작성할 것입니다. 그러나 아래에서 설명한 바와 같이 이 테스트들은 모델 테스트에 포함될 수 있는 유일한 테스트가 아닙니다.또한 응용 프로그램이 발전함에 따라, 사용자는 자신의 취향에 따라 이 테스트들을 컨트롤러 디렉터리로 다시 지정하기를 원할 수도 있습니다.
    하면, 만약, 만약...rails generate rspec:installRails 응용 프로그램에서 테스트할 모델을 설정하면 테스트 파일이 자동으로 생성됩니다.새로 만든 스펙트럼 디렉터리에서 모델 폴더를 찾을 수 있습니다.여기서 [name of your model] spec.rb라는 파일을 찾아야 합니다.이 파일이 없으면 스펙트럼 폴더에 새 파일을 만들고 [name of your model] spec.rb 이름 규약을 따라야 합니다.
    나에게 이 파일은 song spec.rb라고 합니다.내 사양 폴더는 다음과 같습니다.

    이 파일에는 테스트의 기초를 이루는 초기 코드가 포함되어 있어야 한다.나에게 있어서 그것은 이렇게 보인다.
    require 'rails_helper'
    
    RSpec.describe Song, type: :model do
    
    end
    
    이 코드는 Song 클래스에 대한 RSpec 테스트를 설정하고 있음을 보여줍니다.테스트는 우리의 노래 모형을 겨냥하여 이 모듈에서 코드를 작성할 수 있습니다.
    CRUD 작업이 예상대로 작동하는지 확인하기 전에 Song 클래스의 인스턴스를 생성해야 합니다.이 점을 하려면 Before(:all)do를 설정할 수 있습니다...끝 블록, 이렇게:
    RSpec.describe Song, type: :model do
    
      before(:all) do
    
      end
    
    end
    
    before (:all) 를 사용하면 테스트를 시작하기 전에 원하는 일을 지정할 수 있습니다.이것은 이 코드가 모든 테스트가 실행되기 전에 한 번 실행된다는 것을 의미한다.또는, 우리는 사용할 수 있습니다. 만약 우리가 모든 CRUD 테스트를 하기 전에 뭔가를 실행하고 싶다면,:each를 사용할 수 있습니다.
    그런 다음 모든 테스트의 기반으로 사용될 Song 클래스의 인스턴스를 만들어야 합니다.우리는 이렇게 할 수 있다.
    before(:all) do
        @song = Song.create(title: "Like a Rolling Stone", artist: "Bob Dylan", album:"Highway 61 Revisited", release_date: 1965)
    end
    
    테스트를 실행하기 전에 실례를 만드는 것은 직감에 어긋나는 것 같습니다.실제로 각 CRUD 작업이 성공적으로 수행되었는지 확인하기 위해 인스턴스에서 모든 CRUD 작업을 시도합니다.

    사진 작성자@matyszczyk

    3. CRUD 테스트 생성


    만들다


    테스트할 첫 번째 CRUD 작업은 생성입니다.이것은 상당히 간단하다. 우리는 위에서 만든 실례가 유효한지 확인하기만 하면 된다.첫 번째 단계는 it do를 만드는 것입니다.종착역.it 다음에 테스트가 무엇을 하고 있는지 설명하는 문자열을 포함합니다. 다음과 같습니다.
    it 'checks that a song can be created' do
    
    end
    
    그런 다음 다음과 같이 테스트 코드를 추가할 수 있습니다.
    it 'checks that a song can be created' do
        expect(@song).to be_valid
    end
    
    이 코드는 완전히 자기가 말한 대로 한다. 유효한지 확인하고, 결과에 따라true나false로 돌아간다.만약 효과가 있다면 우리의 테스트는 통과할 것이다.만약 결과가 틀렸다면, 우리는 우리의 생성 작업이 실패했고, 코드에 버그가 있다는 것을 알고 있으며, 그것을 찾아서 복원해야 한다.
    테스트를 실행하려면 cd를 프로그램 디렉터리에 넣고 터미널에서rspec를 실행하십시오.

    읽다


    우리의 나머지 테스트는create 테스트와 같은 모델을 따를 것입니다.우선 itdo를 만듭니다.작업이 성공했는지 확인하는 코드를 작성하기 전에 테스트의 끝 블록을 설명합니다.
    여기서, 우리는 우리가 시작할 때 만든 실례를 읽을 수 있는지 확인하고 싶습니다.이 테스트에서, 우리는 원시 실례와 동명의 노래를 찾았고, 결과가 같은지 검사했다.만약 성공한다면 우리의 테스트는 성공할 것이다.만약 그렇지 않다면, 우리의 읽기 조작에 문제가 있을 것이다.
    it 'checks that a song can be read' do
        expect(Song.find_by_title("Like a Rolling Stone")).to eq(@song)
    end
    

    업데이트


    이 테스트에서, 우리는 실례를 업데이트할 수 있는지 확인하고 싶습니다.우리는 먼저 업데이트 방법으로 노래의 제목을 변경한 다음에 업데이트 제목이 있는 노래를 검색할 수 있다.만약 되돌아오는 실례가 같다면, 우리는 갱신 작업이 정상적이라는 것을 알 수 있을 것이다.
    it 'checks that a song can be updated' do
        @song.update(:title => "Like a Rolling Stone - Remastered")
        expect(Song.find_by_title("Like a Rolling Stone - Remastered")).to eq(@song)
    end
    

    부수다


    마지막으로, 우리는 실례를 없앨 수 있는지 검사해야 한다.우리는 먼저 실례상destroy 방법을 사용하여 이 점을 실현할 수 있다.그런 다음 Song 클래스의 총 인스턴스 수를 확인합니다.테스트의 설정 방식과 우리가 하나의 실례만 만들었다는 사실 때문에 우리는 노래가 정확한지 간단하게 검사할 수 있다.인스턴스를 제거한 후 카운트는 0입니다.Song 클래스의 인스턴스가 남아 있고 성공적으로 제거되지 않은 경우 테스트는 실패합니다.만약 계수가 0이라면 모든 것이 정상이다.
    it 'checks that a song can be destroyed' do
        @song.destroy
        expect(Song.count).to eq(0)
    end
    
    물론, 테스트할 클래스의 다른 실례를 만들었다면, 이 테스트는 정상적으로 작동할 수 없습니다.이 경우 destroy 방법을 사용해서 현재 삭제해야 할 실례를 검색할 수 있습니다.검색 결과가 0이면 destroy가 예상대로 작동하고 있음을 나타냅니다.
    it 'checks that a song can be destroyed' do
        @song.destroy
        expect(Song.find_by(title: "Like a Rolling Stone - Remastered")).to be_nil
    end
    
    만약 모든 것이 정상이라면, 너는 반드시 이런 상황을 보아야 한다.

    Rspec에 대한 참고 사항


    이 글에서 우리는 단지 때가 낀 행위를 테스트하는 것만 토론했다.인증과 같은 다른 테스트를 포함하기를 원할 수도 있습니다.컨트롤러를 테스트하고 싶을 수도 있습니다.이 테스트를specs 폴더의 컨트롤러 디렉터리에 추가할 수 있습니다. 이 폴더는 실행할 때 생성됩니다rails generate rspec:install. 프로그램을 설정하는 방식과 테스트를 원하는 방식에 따라 CRUD 동작을 테스트하는 것이 더 의미가 있을 수 있습니다.
    다음 예는 RSpec 테스트를 작성하는 방법일 뿐입니다.루비 가이드는 더 많은 예here를 제공합니다.

    출처

  • "rspec-rails", rubygems, 2020년 12월 7일 방문
  • ", Jeremy Schuurmans, 2020년 12월 7일 DEV 웹사이트 방문
  • "Getting Started with RSpec", 신호등에 있는 마르코 아나스타소프, 2020년 12월 8일 방문
  • "The Definitive RSpec Tutorial With Examples", 루비가이드, 2020년 12월 8일 방문
  • 좋은 웹페이지 즐겨찾기