Ruby on rails 断言差异(';Course.count';)期望差异,但没有变化

Ruby on rails 断言差异(';Course.count';)期望差异,但没有变化,ruby-on-rails,ruby,testing,Ruby On Rails,Ruby,Testing,我正在运行一个测试,试图将课程添加到我的数据库中,但由于某些原因,它似乎没有添加,因为我运行时: test "should create course" do assert_difference('Course.count') do post :create, course: { name: 'New', course_code: '1' } end assert_redirected_to cou

我正在运行一个测试,试图将课程添加到我的数据库中,但由于某些原因,它似乎没有添加,因为我运行时:

test "should create course" do
    assert_difference('Course.count') do
      post :create, course: { name: 'New',
                              course_code: '1' }
    end

    assert_redirected_to course_path(assigns(:course))
  end
我得到:

"Course.count" didn't change by 1.
<3> expected but was
<2>.
课程正确保存在数据库中

以下是创建操作的代码:

def create

    @course = Course.new(params[:course])

    respond_to do |format|
      if @course.save
        @registration = Registration.new
        @registration.active = true
        @registration.user = current_user
        @registration.course = @course
        @registration.course_code = @course.course_code
        @registration.instructor = true
        @registration.save!
        admin = User.find_by_email('admin@email.com')
        @registration = Registration.new
        @registration.active = true
        @registration.user = admin
        @registration.course = @course
        @registration.course_code = @course.course_code
        @registration.instructor = true
        @registration.save!

        format.html { redirect_to @course }
        format.json { render json: @course, status: :created, location: @course }
      else
        format.html { render action: "new" }
        format.json { render json: @course.errors, status: :unprocessable_entity }
      end
    end
  end
以下是课程模型的相关模型代码:

class Course < ActiveRecord::Base
  before_create :create_unique_identifier
  attr_accessible :name, :course_code

  # Relationships
  has_many :registrations, dependent: :destroy
  has_many :assignments, dependent: :destroy
  has_many :users, :through => :registrations

  def create_unique_identifier
    begin
      self.course_code = SecureRandom.hex(4)
    end while self.class.exists?(:course_code => course_code)
  end
课程:注册
def创建唯一标识符
开始
self.course_code=SecureRandom.hex(4)
self.class.exists时结束?(:course\u code=>course\u code)
结束

有人知道我为什么会出现这个错误吗?

好吧,但这两种情况是不同的!我们看不到你的航向控制器发生了什么。但不管它是什么,它都不会导致您的课程被保存。如果您的数据库中已经有两个课程,您是否可能已经使用
课程id:1
存储了一个课程,而第二个课程由于唯一性约束而失败?@SergioTulentsev这两个课程不都只是尝试在数据库中存储一个新课程吗?我还将为创建操作添加控制器代码though@Drenmi课程id实际上是可选的,因为它只是随机生成的,我想当你保存它时,可以将它从测试中删除,但它仍然没有通过测试。所以,在你的控制器测试中,它是
课程代码
,但在控制台中,它是
课程id
。(你的片段)
class Course < ActiveRecord::Base
  before_create :create_unique_identifier
  attr_accessible :name, :course_code

  # Relationships
  has_many :registrations, dependent: :destroy
  has_many :assignments, dependent: :destroy
  has_many :users, :through => :registrations

  def create_unique_identifier
    begin
      self.course_code = SecureRandom.hex(4)
    end while self.class.exists?(:course_code => course_code)
  end