私はデイリー ディール レール アプリを構築しており、M. Hartl チュートリアルに従っていくつかの rspec テストを設定しました。
ユーザーにとって、それらは完全に機能します。
しかし今、私はそれをモデル Eals に使用しており、すべてが合格すべきではないときに合格しています。たとえば、私のモデルでは、タイトルは 200 文字を超えないようにしています (注: 私の見解では、これより長いタイトルを設定しようとすると、機能し、不可能であると警告されます)。
しかし、タイトル テストで long = "a" * 50、a * 201、または * 10000 を使用してタイトル文字の長さのテストを試みても、テストを行うと、常に合格します。私が見つけることができない大きな問題があります。実際、他のすべてのテストには同じ問題があります。それらは常にパスします。
これが私のmodels/deal.rbです
class Deal < ActiveRecord::Base
belongs_to :admin_user
attr_accessible :url_path,
:country,
:title,
:description,
:twitter_msg,
:admin_user_id
validates :url_path,
presence: true,
uniqueness: { :case_sensitive => false }
validates :country,
:inclusion => { :in => ['France', 'Germany', 'United States'],
:message => "%{value} is not a valid country. " }
validates :title,
presence: true,
length: { maximum: 200,
:message => "Your title has %{value} characters but must be shorter than 200 characters" }
validates :description,
presence: true,
length: { maximum: 500,
:message => "Your title has %{value} characters but must be shorter than 500 characters" }
validates :twitter_msg,
presence: true,
uniqueness: { :case_sensitive => false }
validates :admin_user_id, presence: true
そして私の deal_spec.rb:
require 'spec_helper'
describe Deal do
let(:admin_user) { FactoryGirl.create(:admin_user) }
before (:each) do
@attr = { url_path: "lorem ipsum",
country:"France",
title: "lorem ipsum",
description:"lorem ipsum",
twitter_msg:"lorem ipsum",
}
end
it { should respond_to(:url_path) }
it { should respond_to(:country) }
it { should respond_to(:title) }
it { should respond_to(:description) }
it { should respond_to(:twitter_msg) }
describe "title test" do
it "should reject deals with title that is too long" do
long = "a" * 50
hash = @attr.merge(:title => long)
Deal.new(hash).should_not be_valid
end
[other tests]
end #end of title test
誰かがそれを理解するのを手伝ってくれるなら、それは素晴らしいことです.私は何の手がかりもなく何時間も過ごしてきました.
sbのアドバイスに従った後、テストを次のように変更しました
Deal.new(hash).should have(1).error_on(:title)
describe "test" do
it "should reject games with title that is too long" do
long = "a" * 250
hash = @attr.merge(:title => long)
Game.new(hash).should have(1).error_on(:title)
end
end
しかし、今では常に通過しています。つまり、 long= "a" * 5, long="a" * 300... を入力しても、タイトルにエラーが1つあることがわかります...