首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从screencast #228中为Ryan的助手编写RSpec测试?

如何从screencast #228中为Ryan的助手编写RSpec测试?
EN

Stack Overflow用户
提问于 2014-02-27 14:51:45
回答 2查看 1.1K关注 0票数 2

我跟在Ryan Bates关于可排序列的教程后面。

我试图为ApplicationHelper编写一个规范,但是#link_to方法失败了。

这是我的规格:

代码语言:javascript
运行
复制
require "spec_helper"

describe ApplicationHelper, type: :helper do
  it "generates sortable links" do
    helper.sortable("books") #just testing out, w/o any assertions... this fails
  end
end

下面是运行规范的输出:

代码语言:javascript
运行
复制
1) ApplicationHelper generates sortable links
 Failure/Error: helper.sortable("books") #just testing out, w/o any assertions... this fails
 ActionController::UrlGenerationError:
   No route matches {:sort=>"books", :direction=>"asc"}
 # ./app/helpers/application_helper.rb:5:in `sortable'

app/helpers/application_helper.rb(可排序方法)

代码语言:javascript
运行
复制
module ApplicationHelper
  def sortable(column, title = nil)
    title ||= column.titleize
    direction = (column == params[:sort] && params[:direction] == "asc") ? "desc" : "asc"
    link_to title, :sort => column, :direction => direction
  end
end
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-08 06:22:43

发生此错误是因为在您的测试中,Rails不知道url的控制器/操作是什么,以生成url的方式,它将在当前请求params中附加{:=>列,:=>方向},但是由于没有对角,它将失败,因此修复它的一个简单方法是:

代码语言:javascript
运行
复制
describe ApplicationHelper, type: :helper do
   it "generates sortable links" do
       helper.stub(:params).and_return({controller: 'users', action: 'index'})
       helper.sortable("books") #just testing out, w/o any assertions... this fails
   end
end

并按以下方式更新您的助手:

代码语言:javascript
运行
复制
module ApplicationHelper
  def sortable(column, title = nil)
    title ||= column.titleize
    direction = (column == params[:sort] && params[:direction] == "asc") ? "desc" : "asc"
    link_to title, params.merge(:sort => column, :direction => direction)
  end
end
票数 5
EN

Stack Overflow用户

发布于 2019-07-30 22:16:33

老实说,最简单的方法是将request_params传递到helper中,而不是像作为一个完整堆栈运行时那样,尝试将您的params留出。

代码语言:javascript
运行
复制
def sortable(column, request_params, title = nil)
  title ||= column.titleize
  direction = (column == params[:sort] && params[:direction] == "asc") ? "desc" : "asc"
  link_to title, request_params
end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22072019

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档