Loading ...
Sorry, an error occurred while loading the content.

Re: [id-ruby] Numpang nanya doong...

Expand Messages
  • Fauzan Qadri
    okeyy di mengerti bang ronnyà :) mantaabà ... okeyy di mengerti bang ronnyà :) mantaabà On Sep 30, 2013, at 8:01 AM, Ronny Haryanto
    Message 1 of 8 , Sep 30, 2013
    • 0 Attachment
      okeyy
      di mengerti bang ronny… :)
      mantaab…

      On Sep 30, 2013, at 8:01 AM, Ronny Haryanto <ronny@...> wrote:

       

      Halo,

      Saran saya kalo masih belajar, mendingan jangan diribetin dengan
      FactoryGirl, Machinist, dsb dulu. Kalo saya yg nulis tesnya, kira2 gini:

      class Faculty < ActiveRecord::Base
      validates :name, presence: true, uniqueness: true
      end

      describe Faculty do
      subject(:faculty) { Faculty.new(name: name, description: description) }
      let(:name) { "Fakultas Pengetesan" }
      let(:description) { "Kerjanya ngetes mulu" }

      specify { expect(faculty).to be_valid }

      context "when a faculty with the same name already exists" do
      before { Faculty.create!(name: name) }
      specify { expect(faculty).to_not be_valid }
      end

      context "when a faculty name is blank" do
      let(:name) { "" }
      specify { expect(faculty).to_not be_valid }
      end
      end

      Subject itu adalah yg subjek yg sedang dites. Saya lebih suka memberi nama
      subjectnya dan mengacunya pake nama (e.g. `faculty`) ketimbang pake
      `subject`, karena lebih jelas.

      `specify` ini format baru yg disarankan skrg dari `it { should ... }`
      (deprecated). Ini versi lebih singkat aja dibanding nulis:

      it "should not be valid" do
      expect(faculty).to_not be_valid
      end

      Si RSpec bisa generate sendiri label "should not be valid" itu dari specnya
      (makanya namanya specify).

      `expect(...).to ...` ini juga versi baru dari `blah.should ...` yg bakal
      deprecated soon.

      `faculty` tidak ada yg perlu disave untuk bisa dites, kecuali ngetes
      uniqueness. Ini kunci kenapa tes anda failing. Karena subjek anda dibikin
      pake FactoryGirl.create yg akan bikin AR object dan ngesave di DB.
      Sedangkan Faculty.new (atau FactoryGirl.build) akan bikin AR objectnya
      doang tanpa ngesave di DB.

      Poin penting lainnya, subject dan let itu lazily evaluated, jadi pas
      dipanggil baru dijalanin blocknya, sedangkan before block jalan duluan
      sebelum spec/it. Di tes anda, before block yg paling pertama itu dijalankan
      duluan, jadi @faculty udah disave ke DB duluan. Lalu baru before block yg
      di dalem context dijalanin, nah ini urutannya kan salah setupnya.
      Seharusnya yg kita mau adalah before block di dalem context ini dijalanin
      duluan, baru subjeknya dibikin. Makanya lebih baik subject itu lazily
      evaluated (bikin objectnya di dalam blocknya subject, seperti contoh saya),
      jangan dibikin di dalam before block.

      Ronny

      2013/9/28 Fauzan Qadri <ojankill@...>

      > Sore kak / bang…
      > btw salam kenal yaa semua nyaa…
      >
      > ane lagi belajar2 testing pake rspec nih kak / bang…
      >
      > ane punya contoh kasus kaya gini…
      >
      >
      > ----------------------------------------------------------
      >
      > model/faculty.rb
      > ----------------------
      > class Faculty < ActiveRecord::Base
      > validates :name, presence: true, uniqueness: true
      > end
      >
      > spec/factories.rb
      > -----------------------
      > FactoryGirl.define do
      > factory :faculty do
      > name "Some Faculty Name"
      > description "description for faculty name"
      > end
      > end
      >
      > spec/models/faculty_spec.rb
      > ---------------------------------------
      > describe Faculty do
      > before {@faculty = FactoryGirl.create(:faculty)}
      > subject {@faculty}
      >
      > it { should be_valid }
      >
      > context "Ketika Nama Fakultas telah ada" do
      > before do
      > faculty_with_same_name = @...
      > faculty_with_same_name.save
      > end
      > it { should_not be_valid }
      > end
      > end
      >
      >
      > ----------------------------------------------------------
      >
      > pas jalanin dia hasilnya kek gini…
      >
      >
      > nah yang ane mau tanyain…
      >
      > sebener nya " it { should_not be_valid } " pads context "Ketika Nama
      > Fakultas telah ada" itu nge-test yang mana…?
      >
      > ketika di faculty_spec.rb ane ubah jadi…
      >
      >
      > ----------------------------------------------------------
      > spec/models/faculty_spec.rb
      >
      > ----------------------------------------------------------
      > describe Faculty do
      > before {@faculty = Faculty.new({name: "Some Name", description: "Simple
      > description"})}
      > subject {@faculty}
      >
      > it { should be_valid }
      >
      > context "Ketika Nama Fakultas telah ada" do
      > before do
      > faculty_with_same_name = @...
      > faculty_with_same_name.save
      > end
      > it { should_not be_valid }
      > end
      > end
      >
      > ----------------------------------------------------------
      >
      > hasil test nya jadi pas…
      >
      > sekalian, kalo mau belajar test harus mulai dari mana yaa?
      >
      > mohon pencerahan nya yaa kakak/abang sekaliaan…
      >
      > maap sebelum nya kalo bahasa ane kurang di mengrtii...
      >

      [Non-text portions of this message have been removed]


    Your message has been successfully submitted and would be delivered to recipients shortly.