Ruby on rails 另一个操作中更新的RSpec测试

Ruby on rails 另一个操作中更新的RSpec测试,ruby-on-rails,ruby,rspec,Ruby On Rails,Ruby,Rspec,我正在Rails 5中构建一个应用程序,它将用户输入发送回一个名为“TestsController”的控制器。如果参数[:answer]与控制器操作中的“correct_answer”匹配,TestsController控制的“test”对象的“score”将增加1。如果答案不匹配,则分数不会增加 以下是行动: def question1 @test = Test.find(params[:id]) correct_answer = "<p>" user_a

我正在Rails 5中构建一个应用程序,它将用户输入发送回一个名为“TestsController”的控制器。如果参数[:answer]与控制器操作中的“correct_answer”匹配,TestsController控制的“test”对象的“score”将增加1。如果答案不匹配,则分数不会增加

以下是行动:

def question1 
    @test = Test.find(params[:id])
    correct_answer = "<p>"
    user_answer = params[:answer]
    if user_answer == correct_answer
        flash.now[:success] = "That is correct!"
        new_score = @test.score += 1
        @test.update(score: new_score)
    elsif params[:answer].present? && params[:answer] != correct_answer
        flash.now[:danger] = "Wrong answer." 
    end
end

我不确定我做错了什么。似乎未分配@test对象。。。虽然我在同一个RSpec文件中编写了另一个测试,它说它正在被分配。此外,这在应用程序中有效,但在测试中无效。有人能帮忙吗

实际上它告诉你,
test.score
nil

您可以通过两种方式解决此问题:

  • 创建测试Instance时,使用before_create回调将其分数设置为0
  • 如果@test.score.nil?

PS:我会添加一个验证来确保分数是一个整数

实际上它告诉你
test.score
nil

您可以通过两种方式解决此问题:

  • 创建测试Instance时,使用before_create回调将其分数设置为0
  • 如果@test.score.nil?

PS:我会添加一个验证,以确保分数是整数

这是因为在
测试
对象中分数等于
nil

您可以创建一个新的迁移,以确保在数据库级别上,您始终有一个最初应为
0

class ChangeTestsScoreNull < ActiveRecord::Migration
  def change
    change_column_null :tests, :score, 0
  end
end
class ChangeTestsCoreNull
这是因为
测试对象中的分数等于
nil

您可以创建一个新的迁移,以确保在数据库级别上,您始终有一个最初应为
0

class ChangeTestsScoreNull < ActiveRecord::Migration
  def change
    change_column_null :tests, :score, 0
  end
end
class ChangeTestsCoreNull
我认为
@test
是指定的,但是
@test.score
返回
nil
?请确保
score
始终返回一个数字。我认为
@test
已分配,但
@test.score
返回
nil
?请确保
score
始终返回一个数字。谢谢!谢谢你的帮助谢谢!我感谢你的帮助
class ChangeTestsScoreNull < ActiveRecord::Migration
  def change
    change_column_null :tests, :score, 0
  end
end