簡體   English   中英

會話控制器的 Rspec

[英]Rspec for sessions controller

我正在嘗試為會話控制器編寫一個 rspec。 但我不能這樣做。

我想測試控制器的有效和無效的有效屬性。 如果為特定用戶傳遞了有效屬性,則測試應該通過,如果為給定用戶傳遞無效屬性,則測試應該失敗。

require 'rails_helper'

RSpec.describe SessionsController, type: :controller do

   let(:user)  { User.create(name: "some",email: 'other@example.com', password: 'rous',password_confirmation: "some") } 

     describe "get login path" do
        it "login page" do
            get :new
            expect(response).to render_template('sessions/new')
        end
     end

         describe "valid attributes" do
   it "create a session" do 
        post :create, session: { email: user.email, password: user.password }
        expect(response.status).to render_template('/users/@user.id')
   end
 end

 describe "invalid attributes" do
    it "does not create a session" do 
        post :create, session: { email: user.email, password: "12345" }
        expect(response.status).to render_template('sessions/new')
    end
 end


     describe "does not create a session" do

        it "if email is empty" do 
            post :create, session: {password: "some"}
            expect(response.status).to render_template('sessions/new')
        end

        it "if password is empty" do 
            post :create, session: {email: "some@gmail.com"}
            expect(response.status).to render_template('sessions/new')
        end

     end
end

描述“無效屬性”和“有效屬性”無法正常工作。

如果電子郵件/密碼錯誤,用戶將重定向到 session#new 頁面。

如果電子郵件和密碼正確,用戶應該重定向到 user_path,即用戶顯示頁面。

你真的應該在這里使用請求或功能規范,因為它們驅動完整的堆棧。 您不僅想測試您的控制器是否重定向到某個地方 - 您真的想測試重定向到某個地方並讓用戶登錄。最好不要深入內部或模擬您應該首先測試的實際身份驗證過程.

RSpec 和 Rails 團隊都不鼓勵為新應用程序編寫控制器測試/規范。 測試應用程序的行為。 不是它如何工作。

require "rails_helper"

RSpec.feature "User sign in", type: :feature do

  let!(:user) { FactoryBot.create(:user) }

  scenario "User signs in with valid crentials" do
    visit "/sessions/new"
    fill_in "Email", with: user.email
    fill_in "Password", with: user.password
    click_button "Sign In"
    expect(page).to have_text "You have been signed in"
  end

  scenario "User signs in with invalid crentials" do
    visit "/sessions/new"
    fill_in "Email", with: user.email
    fill_in "Password", with: "nottherightpassword"
    click_button "Sign In"
    expect(page).to_not have_text "You have been signed in"
    expect(page).to have_text "Invalid email or password"
  end
end

或者作為較低級別的請求規范:

require "rails_helper"

RSpec.describe "Sessions", type: :request do

  let!(:user) { FactoryBot.create(:user) }

  describe "POST /sessions" do

    context "with valid credentials" do
      it "redirects the user" do
        post '/sessions', 
          params: { session: { email: user.email, password: user.password } }
        expect(response).to redirect_to user_path(user)
        follow_redirect!
        expect(response.body).to include("You have been signed in")
      end
    end

    context "with invalid credentials" do
      it "does not redirect the user" do
        post '/sessions', 
          params: { session: { email: user.email, password: "nottherightpassword" } }
        expect(response).to_not redirect_to user_path(user)
        expect(response.body).to include("Invalid email or password")
      end
    end
  end
end

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM