2017-04-24 4 views
0

Ich möchte mit dem Testen in Schienen beginnen und habe Schwierigkeiten mit der Authentifizierung mit dem Gerät zu arbeiten. den folgenden Test LaufRails devise sign_in funktioniert nicht

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 

Meine Leuchten

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 

Der Test sind "sollte erhalten Index" richtig funktioniert, aber mit "sollten neue bekommen" Ich bekomme immer die Meldung

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>' 

Es scheint, dass

sign_in @employee 

funktioniert nicht? Aber warum im Indextest? Ich habe dieses Problem nur in den Tests. Der laufende Entwicklungsserver funktioniert ordnungsgemäß.

ich Ubuntu bin mit Rails 5.0.1, Rubin 2.4.0, 4.2.1 ersinnen

jemand helfen?

+0

Könnten Sie den EmployeesController Code posten? – Anton

Antwort

0

hier ist der Controller-Code, ich habe einige Berechnungen drin.

# 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 

Christian

Verwandte Themen