0

各行から件名を削除したいのですが、仕様が冗長になりすぎています。

私のモデルには次のコードがあります:-

"#clone_for_resubmit" を記述する

let(:new_item) { @order_item1.clone_for_resubmit(:cart_group => @cart_group, :cloned_collections => { }, :order => @cart_group.order, :message => "this is just for testing purpose", :receiver => "example@example.com", :sender =>"ragarwal@kreeti.com" ) }
subject{ new_item}
it "should clone an order_item" do
  gift = FactoryGirl.create(:gift, :order_item_id => @order_item1.id, :user => @user)
 subject.cart_group.should == @cart_group
  subject.collection.name.should == @order_item1.collection.name
  subject.collection.book.title.should == @order_item1.collection.book.title
  subject.collection.user.should == @order_item1.collection.user
  subject.collection.book.book_chapters.count.should == @order_item1.collection.book.book_chapters.count
  subject.collection.book.book_chapters.last.chapter_title.should == @order_item1.collection.book.book_chapters.last.chapter_title
  subject.collection.items.last.user_recipe.recipe.name.should == @order_item1.collection.items.last.user_recipe.recipe.name
 subject.collection.book.book_chapters.last.items.last.user_recipe.recipe.name.should == @order_item1.collection.book.book_chapters.last.items.last.user_recipe.recipe.name
  subject.gift.recipient_email.should == gift.recipient_email
  subject.gift.message.should == "this is just for testing purpose"
  subject.gift.receiver.should == "example@example.com"
  subject.gift.sender.should == "ragajhk@vy.com"
  subject.payment.payment_amount.should == @order_item1.payment.payment_amount
  subject.payment.order.should == @cart_group.order
end

終わり

4

1 に答える 1

2

David Chelimsky は、'subject' の暗示的な使用をコードの匂いとして説明しているので、それを取り除きたいと思うのは当然です。ただし、あなたのitブロックはあまりにも多くのことを行っているため、仕様の読みやすさに大きな影響を与えます.読みやすくするために、次のようなことをお勧めします:

describe Order do
  describe '#clone_for_resubmit' do
    before do
      # @user = ...
      # @order_item1 = ...          
      # @cart_group = ...          
      @new_item = @order_item1.clone_for_resubmit(:cart_group         => @cart_group,
                                                  :cloned_collections => { },                                                      
                                                  :order              => @cart_group.order,
                                                  :message            => "this is just for testing purpose",
                                                  :receiver           => "example@example.com",
                                                  :sender             =>"ragarwal@kreeti.com" ) }

      @gift = FactoryGirl.create(:gift, :order_item_id => @order_item1.id, :user => @user)
    end

    it 'should use the correct cart group' do
      @new_item.cart_group.should == @cart_group
    end

    it 'should use the correct collection name' do
      @new_item.collection.name.should == @order_item1.collection.name
    end

    it 'should use the correct book title' do
      # etc...
    end
  end
end

そうすれば、spec が読みやすくなるだけでなく、より適切に失敗するようにもなります。

于 2013-04-16T13:22:35.433 に答える