2009-03-23 6 views
4

私は小さなCMSをRailsテストプロジェクトとして作成しています(私の個人用Webサイトでも使用する予定です)。 SEOフレンドリーなURLが必要なので、ページのタイトルに基づいてパーマリンクが自動的に作成されていることを確認するテストがあります(例:About Us => about-us)。しかし、なぜこのテストに失敗したのか分かりません。Railsでパーマリンク(slug)を作成する - テストに失敗したのはなぜですか?

# page_test.rb 
# note I am using the "shoulda" framework 
require 'test_helper' 

class PageTest < ActiveSupport::TestCase 
    should_validate_presence_of :title, :permalink, :content 
    should_validate_uniqueness_of :title 

    should "create permalink automatically" do 
    p = pages(:sample_page) 
    p.save 

    assert_equal "sample-page", p.permalink 
    end 
end 

# pages.yml 
sample_page: 
    title: Sample Page 
    permalink: # gets automatically created by model 
    content: This is a sample page 

# page.rb 
class Page < ActiveRecord::Base 
    validates_presence_of :title, :permalink, :content 
    validates_uniqueness_of :title 

    before_save :generate_permalink 

    private 

    def generate_permalink 
    self.permalink = self.title.parameterize 
    end 
end 

何が起こることはパーマリンクではなく、それをすることになっているように、「サンプル・ページ」で、ゼロであるということである:ここでは(私はRailsの2.3.2を使用しています)のコードです。私は、例えば、手動で固定具にパーマリンクを入れて、周りのテストを変更する場合は、しかし、動作します:

p - pages(:sample_page) 
p.title = "Contact Us" 
p.save 

assert_equal "contact-us", p.permalink 

が、私はこのようにそれを修正することができますが、私は、なぜそれがためbefore_save方法を発射いない思ったんだけど元のテスト。

答えて

2

申し訳ありませんが、私はそれを把握することができました。コールバックにbefore_validationを使用する必要がありました。before_save

0

空のpermalink:キーをpages.ymlファイルから削除すると機能しますか?

+0

いいえ、同じエラーです。 "sample-page"は期待されますが、ゼロになります –

+0

テストを実行すると、サンプルページはテストデータベースに保存されますか? –

+0

ええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええ、私は問題を見ると思う - パーマbefore_saveメソッドは、それを修正する必要があります。なぜbefore_saveが実際にそれを保存する前に呼び出されていないのか分かりません。 –

関連する問題