2017-04-24 14 views
0

私はレールでテストを始め、deviseで認証を行うのが難しいです。次のテストrailsがうまく動作しないsign_inが動作しない

require 'test_helper' 

    class EmployeesControllerTest < ActionController::TestCase 
     include Devise::Test::ControllerHelpers 

     def setup 
     @employee =employees(:one) 
     sign_in @employee 
     end 


     test "should get index" do 
     get :index 
     assert_response :success 
     end 


     test "should get new" do 
     get :new 
     assert_response :success 

     end 
    end 
を実行

は私の備品が

one: 
    anrede: MyString 
    vorname: MyString 
    nachname: MyString 
    telefon: MyString 
    zimmer: MyString 
    status: Admin 
    zugriff: Besteller 
    department_id: 1 
    id: 1 
    email: [email protected] 
    status: Aktuell 
    encrypted_password: password 

テストしている私は常にメッセージを取得する「新得るべきである」正常に動作しているが、と「インデックスが取得する必要があります」

Minitest::Assertion: Expected response to be a <2XX: success>, but was a <302: Found> redirect to <http://test.host/> 
test/controllers/employees_controller_test.rb:20:in `block in <class:EmployeesControllerTest>' 

そうだね

sign_in @employee 

は機能していませんか?しかし、なぜインデックステストで?私はテストでのみこの問題を抱えています。実行中の開発サーバーはすべて正常に動作します。

私は4.2.1

を考案Ubuntuの、Railsの5.0.1、2.4.0ルビーを、使用している誰も助けることができますか?

+0

あなたはEmployeesControllerコードを投稿してもらえますか? – Anton

答えて

0

ここにコントローラコードがありますが、いくつかの計算があります。

# coding: utf-8 
class EmployeesController < ApplicationController 
    load_and_authorize_resource 
    before_action :set_employee, only: [:show, :edit, :update, :destroy] 

    before_action do 
    :verify_is_admin 
    :authenticate_employee! 
    end 

    # GET /employees 
    # GET /employees.json 
    def index 
    @employees = Employee.all 
    end 

    # GET /employees/1 
    # GET /employees/1.json 
    def show 
    end 

    # GET /employees/new 
    def new 

    if current_employee.zugriff =="Admin" then 
     @employee = Employee.new 
    else 
     redirect_to @employee, notice: 'Nur Admins dürfen dies tun' 
    end 
    # @contract_erledigt = Contract.where("vertragsende < ?", Date.today) 
    end 


    # GET /employees/1/edit 
    def edit 
    @aktuell = current_employee.fullname 
    @ents = Entry.where('employee_id' => @employee.id) 
    @worktimes = Worktime.where('employee_id' => @employee.id) 


    @contracts = Contract.where('employee_id' => @employee.id) 

    sollzeit=0 
    @contracts.each do |contract| 
     unless contract.nil? || contract.arbeitszeit.nil? then 

     if (contract.vertragsende >= Date.today) then 
      # Der Vertrag ist noch nicht abgelaufen 
      wz = (Date.today - contract.vertragsbeginn).to_f/7 

     else 
      # Wenn Vertragsende schon vorbei ist ändert sich die Sollzeit nicht mehr 
      wz = (contract.vertragsende - contract.vertragsbeginn).to_f/7 

     end 
     # Berechnung der Urlaubstage des Vertrages 
     urlaubstage = Worktime.where('contract_id'=>contract.id).where('status' => 'Urlaub').count 
     # wz gibt die Anzahl an Wochen zwischen Vertragsende und Beginn an, die sollzeit ist dann 
     # Wochenzeit * Die Wochenarbeitszeit 
     # Davon abgezogen werden die urlaubsstunden 
     sollzeit= sollzeit + wz * contract.arbeitszeit - urlaubstage * contract.arbeitszeit/5 
     end 
     istzeit = @employee.wtsum 

     # Zeitsaldo wäre dann (20 Tage Urlaub pro jahr) 
     @zeitsaldo = istzeit - (sollzeit * 345/365) 

     # Berechnung der Urlaubstage 
     jahraktuell=Worktime.where('extract(year from datum) = ?', Date.today.year) 
     @urlaubaktuell=jahraktuell.where('status' => 'Urlaub').count 

     # @date.strftime("%B %d, %Y") 
    end 
    # Wenn kein Vertrag existiert ist zeitsaldo 0 für die Anzeige im View 
    if @zeitsaldo.nil? then 
     @zeitsaldo=0 
    end 
    end 

    # POST /employees 
    # POST /employees.json 
    def create 
    @employee = Employee.new(employee_params) 

    respond_to do |format| 
     if @employee.save 
     format.html { redirect_to @employee, notice: 'Mitarbeiter wurde erfolgreich erstellt.' } 
     format.json { render :show, status: :created, location: @employee } 
     else 
     format.html { render :new } 
     format.json { render json: @employee.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

    # PATCH/PUT /employees/1 
    # PATCH/PUT /employees/1.json 
    def update 
    respond_to do |format| 
     if @employee.update(employee_params) 
     benutzer = Employee.find(params[:id]) 
     unless (params[:password].nil?) then 
      benutzer.password =params[:password] 
      benutzer.password_confirmation =params[:password_confirmation] 
      benutzer.save! 
     end 

     format.html { redirect_to edit_employee_path(@employee), notice: 'Mitarbeiter wurde erfolgreich geändert.' } 
     format.json { render :show, status: :ok, location: @employee } 
     else 
     format.html { render :edit } 
     format.json { render json: @employee.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

    # DELETE /employees/1 
    # DELETE /employees/1.json 
    def destroy 
    @employee.destroy 
    respond_to do |format| 
     format.html { redirect_to employees_url, notice: 'Mitarbeiter wurde erfolgreich gelöscht.' } 
     format.json { head :no_content } 
    end 
    end 


    private 
    # Use callbacks to share common setup or constraints between actions. 
    def set_employee 
    @employee = Employee.find(params[:id]) 
    end 

    # Never trust parameters from the scary internet, only allow the white list through. 
    def employee_params 
    params.require(:employee).permit(:id, :anrede, :manager, :vorname, :nachname, :telefon, :zimmer, :status, :zugriff, :department_id, :leaving, :password_digest, :email, :password, :password_confirmation) 
    end 

    def verify_is_admin 
    if employee_signed_in? 
     @manager = current_employee.zugriff =="Admin" 
    else 
     @manager=FALSE 
    end 

    end 


end 

クリスチャン

関連する問題