Ruby on rails 另一个操作中更新的RSpec测试
我正在Rails 5中构建一个应用程序,它将用户输入发送回一个名为“TestsController”的控制器。如果参数[:answer]与控制器操作中的“correct_answer”匹配,TestsController控制的“test”对象的“score”将增加1。如果答案不匹配,则分数不会增加 以下是行动: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
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