0

Rails 3.2、Rspec 2、カピバラ 2 を使用しています。

Web ページで本文テキストの文字列を切り詰めており、機能仕様でこれをテストしたいと考えています。

未定義のメソッドであると言い続けているため、テストでtruncateを呼び出すことができないため、誰かがこれを行う方法をアドバイスできますか?truncate 関数を適用するだけで十分です。

を使ってみましたがhelper.truncate()view.truncate()だめでした。

lorem ipsum 文字列を生成し、それを切り捨てて何らかの方法で比較する方法がある場合、テストの他の部分で Faker gem を使用しました。

コードを表示:

<dd><%= truncate(project.details, :length => 100) %></dd>`

テストコード

it { should have_selector('dd', @project.details) }

このテスト test は、完全な詳細テキストを表示していたときに問題なく機能しましたが、このビューでは最初の 100 文字のみを表示することにしたため、詳細を固定文字列として設定せずにこれをテストする方法がわかりません。次に、何らかの形で切り捨てられたバージョンを確認します。

ありがとう

コル

4

3 に答える 3

1

これは私にとってはうまくいきます:)

require 'active_support/core_ext/string/filters'

it { should have_selector('dd', @project.details.truncate(100)) }
于 2013-09-30T19:29:39.933 に答える
1

最終的に、ページがより大きな画面で表示されている場合、幅の広い列を使用すると、より多くの詳細を表示でき、テキストを切り捨てる必要が減ると判断したため、代わりに css を使用して詳細をトリミングすることにしました。以下を使用して画面に表示されました。

.text-trim {
  overflow: hidden;
  white-space: nowrap;
  text-overflow: ellipsis;
}
于 2013-11-18T20:33:57.920 に答える
1

truncateクラスの Rails 拡張であるためString、Ruby や RSpec では使用できません。何らかの方法で「含める」方法があるかもしれませんが、私はその方法に精通しています。ただし、定義は自己完結型であるため、自分で定義するのは簡単です。http://apidock.com/rails/String/truncateから取得したソースを次に示します。これはインスタンス メソッドに定義されているため、渡された文字列で使用する場合は、現在本体の最初の行で行われているtext参照の代わりにパラメーターを含める必要があります。self

# File activesupport/lib/active_support/core_ext/string/filters.rb, line 38
  def truncate(length, options = {})
    text = self.dup
    options[:omission] ||= "..."

    length_with_room_for_omission = length - options[:omission].mb_chars.length
    chars = text.mb_chars
    stop = options[:separator] ?
      (chars.rindex(options[:separator].mb_chars, length_with_room_for_omission) || length_with_room_for_omission) : length_with_room_for_omission

    (chars.length > length ? chars[0...stop] + options[:omission] : text).to_s
  end
于 2013-08-07T18:13:15.913 に答える