【发布时间】:2016-12-22 12:19:50
【问题描述】:
好的,我有这个控制器代码:
def create
@foo = Foo.new(user: User.new(user_params))
if @foo.save
redirect_to foos_path
else
render :new
end
end
并且我想测试当用户电子邮件无效时它是否重新呈现新页面。为此,我创建了这个测试:
it "should re-render the new template" do
post :create, params: { user: attributes_for(:user, email: "abc.com") } }
expect(response).to render_template(:new)
end
但是,由于此错误,测试失败:
Failure/Error: if @foo.save
ActiveRecord::StatementInvalid:
PG::NotNullViolation: ERROR: null value in column "user_id" violates not-null constraint
DETAIL: Failing row contains (260, null).
: INSERT INTO "foos" DEFAULT VALUES RETURNING "id"
Foo 表有一个
t.belongs_to :user, null: false, index: true
这样它就不会在没有用户的情况下添加 foo。
我认为这个错误实际上是一种期望的行为,因为它会阻止 foo 在没有用户的情况下保存,并且用户不能使用无效的电子邮件保存。但是我仍然需要测试它,所以我测试它错误吗?我怎样才能做到这一点?有什么遗漏吗?
提前致谢!
【问题讨论】:
标签: ruby-on-rails activerecord rspec