rails设计sign_in不工作

时间:2017-04-24 14:01:58

标签: devise ruby-on-rails-5 minitest

我想从rails开始测试,并且难以使用设计进行身份验证。 运行以下测试

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: MyString@email.de
  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,ruby 2.4.0,设计4.2.1

有人可以帮忙吗?

1 个答案:

答案 0 :(得分: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

基督教