我正在尝试提高测试覆盖率(仅安装了simplecov),并且很高兴已经拥有良好的覆盖率。但是,我并没有在测试中发现一些失败模式,但是我不知道如何在Rails中创建对象时强制失败(例如,保存(5.2,如果很重要))。关于如何强制和捕获save
或update_attributes
方法失败的任何指示?
我的主要测试工作正常。我只是不知道如何在测试中将代码压低到这些分支上!
相关的控制器方法:
def create
@project = current_user.projects.build(project_params)
if @project.save
flash[:notice] = "Project created!"
redirect_to user_path(current_user)
else
flash[:alert] = "There was an error. Your project was not created."
render 'new'
end
end
此测试的第一个分支(if @project.save
)已测试。第二个(else
)不是。我用来测试成功的测试如下:
sign_in @user
assert_difference 'Project.count', 1 do
post projects_path, params: {project: {name: @new_project_name, user_id: @user.id}}
end
assert_redirected_to user_path(@user)
我真正想要的是可以成功assert_no_difference
的地方!
答案 0 :(得分:0)
save
在发生验证错误时返回false
。
查看您的Project
模型并产生无效的参数。例如,如果有validates :some_field, presence: true
,则跳过该字段,验证将失败。