ruby-on-rails – 如何使用Rspec测试控制器 – #show动作
发布时间:2020-12-17 03:39:45 所属栏目:百科 来源:网络整理
导读:我有一个属于用户的批处理模型.用户应该只能看到自己的Batches实例. 对于索引操作,这是我做的: 批#指数 context "GET index" do it "should get only users batches" do FactoryGirl.create(:batch) batch = FactoryGirl.create(:batch) batch2 = FactoryGi
我有一个属于用户的批处理模型.用户应该只能看到自己的Batches实例.
对于索引操作,这是我做的: 批#指数 context "GET index" do it "should get only users batches" do FactoryGirl.create(:batch) batch = FactoryGirl.create(:batch) batch2 = FactoryGirl.create(:batch) subject.current_user.batches << batch get "index" assigns(:batches).should == subject.current_user.batches assigns(:batches).should_not include(batch2) end end 对于创建动作,这是我做的: 批#创建 context "POST create" do it "should save a users batch into current_user" do batch = subject.current_user.batches.build(name: 'bla') put :create,batch subject.current_user.batches.should include(batch) end it "should save a batch from other user into current_user" do batch = subject.current_user.batches.build(name: 'bla') batch2 = FactoryGirl.create(:batch) put :create,batch subject.current_user.batches.should_not include(batch2) end end 但是,我不确定如何在show动作中测试此行为.这是我正在做的事情: 批#秀 context "GET show/:id" do it "should show batches from user" do batch_params = FactoryGirl.build(:batch) batch = subject.current_user.batches.create(batch_params) get :show,id: batch.id response.should redirect_to(batch) end it "should not show batches from other users" do batch = subject.current_user.batches.create(name: 'bla') batch2 = FactoryGirl.create(:batch) get :show,id: batch2.id response.should redirect_to(:batches) end end 我遇到了以下失败: Failures: 1) BatchesController GET show/:id should not show batches from other users Failure/Error: response.should redirect_to(:batches) Expected response to be a <:redirect>,but was <200> # ./spec/controllers/batches_controller_spec.rb:66:in `block (3 levels) in <top (required)>' 2) BatchesController GET show/:id should show batches from user Failure/Error: batch = subject.current_user.batches.create(batch_params) NoMethodError: undefined method `stringify_keys' for #<Batch:0x00000005d0ef80> # ./spec/controllers/batches_controller_spec.rb:58:in `block (3 levels) in <top (required)>' 我究竟做错了什么?我该如何测试视图操作的这种行为? 解决方法
第一次失败,“不应该显示来自其他用户的批次”,看起来它可能反映了控制器中的实际问题.您是否也在浏览器中对此进行了测试以确认问题是在您的测试中而不是在实际代码中?
在另一个测试中,我不太确定问题究竟是什么,但我可能会像这样构建批处理: batch = FactoryGirl.create(:batch,user: subject.current_user) 尝试一下,看看它是否解决了. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |