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