加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 使用rspec测试一般控制器操作

发布时间:2020-12-17 02:21:37 所属栏目:百科 来源:网络整理
导读:这是我的路线的样子: /article/:id/:action {:root="article",:controller="article/article",:title="Article"} 这是我的控制器的样子: # app/controllers/article/article_controller.rbclass ArticleController ApplicationController def save_tags #
这是我的路线的样子:

/article/:id/:action     {:root=>"article",:controller=>"article/article",:title=>"Article"}

这是我的控制器的样子:

# app/controllers/article/article_controller.rb
class ArticleController < ApplicationController
  def save_tags
    # code here
  end
end

我想测试save_tags动作,所以我写这样的规范:

describe ArticleController do       
   context 'saving tags' do
     post :save_tags,tag_id => 123,article_id => 1234
     # tests here
   end
end

但是当我运行这个规范时,我得到了错误

ActionController::RoutingError ...
No route matches {:controller=>"article/article",:action=>"save_tags"}

我认为问题是save_tags动作是一般控制器动作,即.路线中没有/ article /:id / save_tags.测试此控制器操作的最佳方法是什么?

解决方法

你是现货.问题是你正在寻找一条没有:id的路线,但你没有.你需要将一个参数传递给post:save_tags:id,并且给出上述问题,我相信你正在调用article_id.

因此,请尝试将测试更改为:

describe ArticleController do       
   context 'saving tags' do
     post :save_tags,id => 1234
     # tests here
   end
end

更新

Rails可能会因为你在你的路线中使用:动作而感到困惑,我相信动作要么是保留的单词,要么是Rails认为特殊的单词.也许尝试将您的路线更改为:

/ article /:id /:method_name {:root =>“article”,:controller =>“article / article”,:title =>“Article”}

你的测试:

describe ArticleController do       
  context 'saving tags' do
    post :save_tags,{ :tag_id => 123,:article_id => 1234,:method_name => "save_tags" }
    # tests here
  end
end

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读