markdown Rspec - TDD

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了markdown Rspec - TDD相关的知识,希望对你有一定的参考价值。

# Instalação
```ruby
# Gemfile
group :development, :test do
  gem 'rspec-rails', '~> 3.7'
end
```

# Setup
```bash
rails generate rspec:install
```
# Controllers

### O que o controller faz ?
- Recebe requisições (com/sem autenticação)
- Manipula Models
- Cria respostas
  - Renderizando um template
  - Respondendo com um formato solicitado (json)
  - Redirecionando para outra rota

## Generate
```bash
rails g rspec:controller ads
```

## Config
```ruby
# spec/rails_helper.rb

RSpec.configure do |config| 

    #Devise
    config.include Devise::Test::ControllerHelpers, :type => :controller
    
end

```

## Examples
```ruby
require 'rails_helper'

RSpec.describe AdsController, type: :controller do

    describe 'as guest' do
        
        context '#index' do
            
            # testando requisição 'não autenticada'
            it 'responds successfully' do
                get :index
                expect(response).to be_success
            end
            
            # testando pelo status
            it 'responds a 200 response' do
                get :index
                expect(response).to have_http_status(200)
            end
            
        end
        
        context '#show' do
            
            # testando erro ao acessar página que
            # precisa de login, mas não esta logado
            it 'responds a 302 response (not authorized)' do
                get :show, params: {id: 1}
                expect(response).to have_http_status(302)
            end
            
        end
    
    end
    
    describe "as logged user" do
        
        before do
            @user = create(:user)
            @ad = create(:ad)
            sign_in @user
        end
        
        context '#index' do
            # testando com login
            it 'responds a 200 response with login' do
                get :show, params: {id: @ad.id}
                expect(response).to be_success
            end
        end
        
        context '#create' do
            # testando post
            it 'with valid attributes' do
                ad_params = attributes_for(:ad)
                expect {
                    post :create, params: {ad: ad_params}
                }.to change(Ad, :count).by(1)
            end
        end
        
    
    end
    
    # testando notice
    it 'flash notice' do
        expect(flash[:notice]).to match(/successfully created/)
    end
    
    # testando content-type
    it 'content-type' do
        post :create, format: json, params: {ad: ad_params}
        expect(response.content_type).to eq('application/json')
    end
    

end
```

以上是关于markdown Rspec - TDD的主要内容,如果未能解决你的问题,请参考以下文章

Rspec: everyday-rspec实操: 第10章测试其他功能,第11章TDD

markdown RSPEC核心测试

markdown Rspec的入门

markdown RSPEC

markdown RSpec备忘单

RSpec - 未初始化的常量,例如double