我想从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
有人可以帮忙吗?
答案 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
基督教