我正在测试RSpec2中的控制器以及我的创建和更新操作,当传递无效参数时,控制器应分别渲染“新”或“编辑”模板。它正在这样做,但我的测试永远不会过去。
describe "with invalid params" do
before(:each) do
User.stub(:new) { mock_user(:valid? => false, :save => false) }
end
it "re-renders the 'new' template" do
post :create, :company_id => mock_company.id
response.should render_template("new")
end
end
结果如下:
re-renders the 'new' template
expecting <"new"> but rendering with <"">
以下是控制器操作:
respond_to do |format|
if @user.save
format.html {
flash[:notice] = "#{@user.full_name} was added to #{@company.name}."
redirect_to company_users_url(@company)
}
else
logger.debug @user.errors
format.html{
render :new
}
end
end
此问题似乎也与此控制器隔离。我有几乎相同的代码运行另一个控制器,它很好。我不确定问题出在哪里。
更新 这是两个模拟方法
def mock_user(stubs={})
@mock_user ||= mock_model(User, stubs).as_null_object
end
def mock_company(stubs={})
(@mock_company ||= mock_model(Company).as_null_object).tap do |company|
company.stub(stubs) unless stubs.empty?
end
end
答案 0 :(得分:1)
原来这是一个存根和CanCan的问题。 CanCan正在加载资源并使用一些不同于我想象的方法。