açıkçası raylar için oldukça yeni 'yeni' yöntemine parametreleri geçirmek, böylece de benimlesin.raylar
benim modeli
class Movie < Media
attr_accessible :director, :studio
attr_accessor :director, :studio
validates_presence_of :director, :studio, :title
def initialize title, director, studio
@title = title
@director = director
@studio = studio
end
end
ve benim için berbat şeyler bu tür bir yapıcı ekledik. Ben bir yöntem yaşadım Befor bu
def new
@movies = Movie.new
end
gibi benim denetleyicisi ve initialize gelmeden önce o güzel çalıştı 'yeni'. 'Yeni' yönteme geçirilecek parametreler gerektirir, ancak bu bir görüşün bir kullanıcıdan argümanların iletilmesi ve kaydedilmesi için açıldıktan sonra yapıldı. Bir hatayı
wrong number of arguments (0 for 3)
yapıcı eklendi olsun, çünkü Şimdi nedeniyle benim uygulama için bir test yazma ve o testi geçersiz olacak yapıcı için varsayılan degerler ayar başladı gerçeğine bu görünümü açamıyor. Bunu çözme önerisi?
DÜZENLEME: Benim testler şu şekilde görünür: ActiveModel tarafından sağlanan
tüm testler başarısız yapıcı olmadanrequire 'spec_helper'
describe Movie do
before :each do
@movie = Movie.new "Bullet", "John", "20th"
end
describe "#{new}" do
it "returns new object of Movie" do
@movie.should be_an_instance_of Movie
end
it "throws ArgumentError when give less than 3 parameters" do
lambda {Movie.new(:director => "John", :studio => "20th")}.should raise_exception ArgumentError
end
end
describe "#title" do
it "returns the correct title" do
@movie.title.should eql "Bullet"
end
end
describe "#director" do
it "returns the correct director" do
@movie.director.should eql "John"
end
end
describe "#studio" do
it "returns the correct studio" do
@movie.studio.should eql "20th"
end
end
end
....
Öneri: sadece test için varsayılan değerler belirleyebilirler olarak ayarlayabilmek için yollar sağlar ve uygulama koduna bu kan ağlamaz test için bir fabrika kullanmak gerekiyorsa. Eğer başka nedenlerden dolayı bunu yapmak gerekirse, [bu soruya bakın] (http://stackoverflow.com/questions/328525/what-is-the-best-way-to-set-default-values-in-activerecord) – numbers1311407
Testlerimde uygun argümanlar yapıyorum. Sorun değil. Test, bu problemin ortaya çıkması durumunda kurucuyu eklemek zorunda olan 3'den az argüman olup olmadığını kontrol ediyordu. –
Ok, yeni öneri: Kod sayacı yaygın bunları düzeltmek için raylar bileşenleri kullanılan yazmaya zorlayan hiçbir neden çekirdek active_record duruma zarar testleri yazmayın. 'ActiveRecord :: Base # initialize' argümanların bir listesini değil, bir parametre nesnesini kabul eder. Eğer böyle bir birincil file parçası kırmakta ısrar ederseniz, bu sizin için birçok problemin ilki olacaktır. – numbers1311407