私は小さな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方法を発射いない思ったんだけど元のテスト。
いいえ、同じエラーです。 "sample-page"は期待されますが、ゼロになります –
テストを実行すると、サンプルページはテストデータベースに保存されますか? –
ええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええ、私は問題を見ると思う - パーマbefore_saveメソッドは、それを修正する必要があります。なぜbefore_saveが実際にそれを保存する前に呼び出されていないのか分かりません。 –