【问题标题】:post:create in rspec test giving 'count should have been changed by 1, but was changed by 0'post:create 在 rspec 测试中给出 'count 应该已更改 1,但已更改为 0'
【发布时间】:2012-06-29 18:09:13
【问题描述】:

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

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)>'

这是我的控制器:

  def create
    @admin_user = Admin::User.new(params[:admin_user])
    if @admin_user.save
      render nothing: true
    end
  end

还有一个工厂:

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 控制台添加用户就可以了。任何帮助将不胜感激。提前致谢。

【问题讨论】:

    标签: ruby-on-rails rspec2 ruby-on-rails-3.2 factory-bot rspec-rails


    【解决方案1】:

    这一行:

    post :create, FactoryGirl.attributes_for(:admin_user)
    

    应该是这样的:

    post :create, :admin_user => FactoryGirl.attributes_for(:admin_user)
    

    作为练习,在控制器的创建操作中打印出参数(p paramsputs params.inspect),您会看到不同之处。

    编辑你应该尝试两件事:

    1. 仍然打印出参数,看看它们是否对您有意义。
    2. 问题可能是您的参数无效。不要使用save,而是尝试使用save!,如果您的任何验证错误,它将引发错误,您将在测试输出中看到错误。如果保存失败,您应该处理这种情况。

    【讨论】:

    • 这就是我第一次得到的,但是在寻找修复程序时试图更改代码,不小心我把 changed 代码放在这里了。已经更新了。测试仍然失败。
    • 广告。 1 两个参数在结构上似乎相同:控制器的{:name=&gt;"Dannie", :email=&gt;"camden@emmerichshields.us", :password=&gt;"aaa"} 和来自工厂的{:name=&gt;"Abbey", :email=&gt;"herbert.schimmel@oreilly.co.uk", :password=&gt;"aaa"} ad.2 savesave! 都给我同样的失败错误。不管怎么说,还是要谢谢你。我真的很感激。
    猜你喜欢
    • 2016-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-28
    • 2019-05-29
    • 2021-11-19
    相关资源
    最近更新 更多