2013-08-06 95 views
0

我正在使用Rails 3.2,Rspec 2和水豚2.是否可以在rspec功能測試中調用truncate方法?

我正在截斷我的網頁中的正文文本字符串,並且想要在我的功能規範中測試此功能。

有人可以建議如何做到這一點,因爲我似乎無法在我的測試中調用truncate,因爲它一直說它是一個未定義的方法,我真的不想在我的測試套件中有一長串截短的文本;只是應用截斷函數就夠了。

我試過使用helper.truncate(),view.truncate()但無濟於事。

我在測試的其他部分中使用了Faker gem,如果有辦法生成lorem ipsum字符串並截斷它以便以某種方式進行比較。

查看代碼:

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

測試代碼

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

此測試將測試工作得很好,當我展示的全部細節文字,但因爲我已經決定,只顯示在這個視圖中前100個字符我不知道如何測試這個,而不必將細節設置爲固定字符串,然後以某種方式檢查它的截斷版本。

由於

山口

+0

請您分享您的規範,使我們可以對此有何評論? –

+0

嗨,彼得Alfvin,我已經添加查看和測試代碼的問題。 – user1116573

回答

1

最後我決定,如果該頁面,因此在大屏幕上看到那麼寬列將允許更多的細節顯示和減少需要截斷文本,所以我決定削減的細節用css來代替,以減少什麼結果顯示在屏幕上使用下列內容:

.text-trim { 
    overflow: hidden; 
    white-space: nowrap; 
    text-overflow: ellipsis; 
} 
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 
0

這對我的作品:)

require 'active_support/core_ext/string/filters' 

it { should have_selector('dd', @project.details.truncate(100)) } 
相關問題