我有一个Page
资源, pages_controller.rb 文件中的create
操作如下所示:
def create
@page = Page.new(page_params)
if @page.save
flash[:notice] = "#{@page.name} was created successfully."
redirect_to pages_url
else
render 'new'
end
end
private
def page_params
params.require(:page).permit(:name, :content)
end
pages_controller_spec.rb 文件中的以下测试:
describe PagesController do
describe "POST Create'" do
it "creates a new page" do
Page.should_receive(:new)
post :create, page: {name: "Foo", content: "Bar"}
end
end
end
会产生以下错误:未定义的方法'保存'为nil:NilClass
我刚刚开始使用RSpec;所以我肯定犯了一个错误,或者我忽略了一些简单的事情。另外,我正在关注“RSpec Book”,它继续在page = mock_model(Page).as_null_object
之前添加:Page.should...
,但我仍然遇到同样的错误。有任何想法吗?谢谢你提前。
答案 0 :(得分:2)
用
Page.should_receive(:new)
你基本上是抄袭它。这是简短的:
Page.should_receive(:new).and_return(nil)
这就是为什么你在nil上得到错误的原因:NilClass。您可以做的是链接到and_call_original的调用,如下所示:
Page.should_receive(:new).and_call_original
或者你专门返回一个模拟,类似于:
Page.should_receive(:new).and_return(mock_model(Page))
答案 1 :(得分:0)
你有夹具文件夹中的page.yml可能是因为它没有保存 在我的应用程序中,我添加了蓝色 print.rb是我模型的结构。