帮助理解这个RSpec测试

时间:2011-04-16 03:14:13

标签: ruby-on-rails activerecord rspec

我正在努力确定我为何真正起作用的理解 我的应用程序只是本实验目的的默认支架。

it "creates a record and redirects with success notice" do
    Project.any_instance.stubs(:valid?).returns(true)   #ensure action behaves as if @project was valid
    post :create, :format => :js
    assigns(:project).errors.should be_empty    #ensures that @project has no errors
    flash[:notice].should_not be_nil            #ensure a flash notice is set
    response.should redirect_to(projects_path)  #ensure appropriate redirection
  end

end

在控制器中,在@project上调用save方法。这是我不确定的地方。该对象将保存,因为有效?方法已被存根以返回true,即使该对象无效。但是如果对象无效,保存怎么会成功?

1 个答案:

答案 0 :(得分:0)

Rails在保存之前也在内部调用你的valid?存根,因此它会正常进行保存,因为它认为没有错。

另一方面,如果您在MySQL数据库中的某个字段上有一个UNIQUE索引,那么重复的行仍然可能会阻止保存该记录,即使您存根valid?。两个可能的验证层。