这是我为用户创建的操作:
def create
@user = User.new(user_params)
if @user.save
respond_to do |format|
format.html {
redirect_to edit_admin_user_path(@user)
flash[:success] = "Successfully created"
}
end
else
render :new
flash[:alert] = "Something went wrong"
end
end
Run Code Online (Sandbox Code Playgroud)
我的测试看起来像这样:
context "POST methods" do
describe "#create" do
it "renders the edit template" do
post :create, user: FactoryGirl.attributes_for(:user)
expect(response).to render_template(:edit)
end
end
end
Run Code Online (Sandbox Code Playgroud)
但是我收到这个错误:
Failures:
1) Admin::UsersController POST methods #create renders the edit template
Failure/Error: expect(response).to render_template(:edit)
expecting <"edit"> but was a redirect to <http://test.host/admin/users/80/edit>
Run Code Online (Sandbox Code Playgroud)
我想检查创建用户后是否呈现 edit.html.haml 文件。我究竟做错了什么?
更新 …
我正在测试用于创建新订单的控制器方法(类似电子商务的应用程序)。如果用户存在于系统中,则应将他重定向到new_user_session_path,否则重定向到new_order_path。就那么简单。
这是我的orders_controller.rb
def new
if !User.where(phone: params[:phone]).blank? && !user_signed_in?
redirect_to new_user_session_path()
flash[:info] = "Already present"
else
@order = Order.new
@menu = Menu.find(params[:menu_id])
@menu_price = @menu.calculate_price(@menu, params)
end
end
Run Code Online (Sandbox Code Playgroud)
在我的应用程序中,我需要调用calculate_price方法,因为它计算给定参数的总价格。但在我的测试中,我只想确保重定向是正确的。
现在我收到类似的错误(它们源自 Menu.rb 文件,因为调用了calculate_price):
Front::OrdersController#new redirects user to new order page if user is not present in the system
Failure/Error: menu_price_change = menu_amount.split(",")[1].gsub(" ","").gsub("]",'')
NoMethodError:
undefined method `split' for nil:NilClass
Run Code Online (Sandbox Code Playgroud)
这是我的规格文件:
require 'rails_helper'
describe Front::OrdersController, type: :controller do
describe '#new' do
# Set up dummy menu
let …Run Code Online (Sandbox Code Playgroud)