Ruby on rails post:在rspec测试中创建,给出“计数本应由1更改,但已由0更改”

Ruby on rails post:在rspec测试中创建,给出“计数本应由1更改,但已由0更改”,ruby-on-rails,rspec2,ruby-on-rails-3.2,factory-bot,rspec-rails,Ruby On Rails,Rspec2,Ruby On Rails 3.2,Factory Bot,Rspec Rails,我在测试控制器的创建方法时遇到问题。我的测试: describe "POST #create" do it "creates a new admin_user" do expect{ post :create, :admin_user => FactoryGirl.attributes_for(:admin_user) }.to change(Admin::User,:count).by(1) end end 还有我得到的失败规范: 1) Admin:

我在测试控制器的创建方法时遇到问题。我的测试:

describe "POST #create" do
  it "creates a new admin_user" do
    expect{
      post :create, :admin_user => FactoryGirl.attributes_for(:admin_user)
    }.to change(Admin::User,:count).by(1)
  end
end
还有我得到的失败规范:

1) Admin::UsersController logged in POST #create creates a new admin_user
     Failure/Error: expect{
       count should have been changed by 1, but was changed by 0
     # ./spec/controllers/admin_users_controller_spec.rb:75:in `block (4 levels) in <top (required)>'
和一个工厂:

require "factory_girl"
require 'ffaker'

FactoryGirl.define do
  factory :admin_user, class: "Admin::User" do |f|
    f.name {Faker::Name.first_name}
    f.email {Faker::Internet.email}
    f.password "aaa"
  end
end
我的模型是:

class Admin::User < ActiveRecord::Base
  has_secure_password
  validates :email, :uniqueness => true, :presence => true 
  validates_presence_of :password, :on => :create
end
我不知道会出什么问题。我在整个互联网上搜索过,但没有找到答案。从rails控制台添加用户效果很好。任何帮助都将不胜感激。提前感谢。

此行:

post :create, FactoryGirl.attributes_for(:admin_user)
应该是这样的:

post :create, :admin_user => FactoryGirl.attributes_for(:admin_user)
作为练习,在控制器的创建操作中打印出params p params或puts params.inspect,您将看到不同之处

编辑您应该尝试两件事:

仍然打印参数,看看它们是否对您有意义。 问题可能是您的参数无效。不要使用save,而是尝试使用save!如果您的任何验证错误,它将抛出一个错误,并且您将在测试输出中看到错误。如果保存失败,您应该处理这种情况。
这是我第一次遇到的问题,但是当我试图在寻找修复程序时更改代码时,我意外地将更改后的代码放在了这里。已经更新了。测试仍然失败。1两个参数在结构上似乎相同:控制器的{:name=>Dannie,:email=>camden@emmerichshields.us,:password=>aaa}和工厂{:name=>Abbey,:email=>herbert。schimmel@oreilly.co.uk,:password=>aaa}ad.2保存和保存!给我同样的失败错误。无论如何,谢谢你。我真的很感激。
post :create, :admin_user => FactoryGirl.attributes_for(:admin_user)