【发布时间】:2016-07-27 07:20:41
【问题描述】:
这是我在 users_controller.rb 中的创建方法
def create
@user = User.new(user_params)
respond_to do |format|
if @user.save
format.html { redirect_to users_url, notice: 'User was successfully created.' }
format.json { render :show, status: :created, location: @user }
else
format.html { render :new }
format.json { render json: @user.errors, status: :unprocessable_entity }
end
end
end
private
def set_user
@user = User.find(params[:id])
end
def user_params
params.require(:user).permit(:name, :password, :password_confirmation)
end
结束
这是我的 Users_controllers_spec.rb 文件
require 'rails_helper'
RSpec.describe UsersController, type: :controller do
describe "Post /create" do
let(:user){build(:user)}
it "should create user" do
expect(User).to receive(:new).with({name: 'Naik', password: 'secret', password_confirmation: 'secret'}).and_return(User)
post :create, user: {name: 'Naik', password: 'secret', password_confirmation: 'secret'}
expect(flash[:success]).to eq("User was successfully created.")
expect(response).to redirect_to(users_path)
end
end
end
这是我得到的错误。我错过了什么吗?我是 Rspec 测试的新手,所以任何关于如何解决它的建议都将不胜感激。
谢谢。
【问题讨论】:
-
不确定但试试这个:
expect(User).to receive(:new).with({name: 'Naik', password: 'secret', password_confirmation: 'secret'}.with_indifferent_access) -
你应该试试
params = ActionController::Parameters.new( {name: 'Naik', password: 'secret', password_confirmation: 'secret'}) user_params = UsersController::UserParams.build(params) expect(user_params).to eq({name: 'Naik', password: 'secret', password_confirmation: 'secret'}.with_indifferent_access) -
我试过了,没用。
-
试着说
expect(User).to receive(:new).with({name: 'Naik', password: 'secret', password_confirmation: 'secret'}).and_return(user)一些例子可以在这里找到,这绝对是工作github.com/learnable-content/RSpec-collection/blob/…
标签: ruby-on-rails ruby rspec rspec-rails