2017-04-24 92 views
0

我想先在rails中進行測試,並且難以使用設計進行身份驗證。 運行下面的測試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 

不工作?但是爲什麼在指數測試中呢?我只有在測試中遇到這個問題。運行開發服務器一切正常。

我使用Ubuntu,Rails的5.0.1,2.4.0紅寶石,設計4.2.1

有人能幫忙嗎?

+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 

基督教