2017-03-09 4 views
-1

Ich lerne Rubin auf Schienen. Und in meinem neuen Projekt verwende ich rspec, shofaa matchers. Ich möchte nur wissen, wie ich die Art, Spezifikationen zu schreiben, verbessern kann. Und ich muss "Term" auch in anderen Modellspezifikationen wiederverwenden. Wie kann ich das machen?Wie kann ich die Spezifikationen verbessern

Dank

require 'rails_helper' 

RSpec.describe Portfolio, type: :model do 
    it { should validate_presence_of(:code) } 
    it { should validate_presence_of(:name) } 

    it "has a valid factory" do 
     expect(FactoryGirl.create(:portfolio)).to be_valid 
    end 

    it { should belong_to(:client) } 
    it { should belong_to(:custodian) } 

    let(:client) { FactoryGirl.create(:client) } 
    let(:bank) { FactoryGirl.create(:bank) } 
    let(:product_cash) { ProductType.create(code: "CASH", name: "Cash") } 
    let(:product_interest) { ProductType.create(code: "INTEREST", name: "Interest Bearing") } 
    let(:product_discount) { ProductType.create(code: "DISCOUNT", name: "Discount") } 
    let(:custodian) { FactoryGirl.create(:custodian) } 
    let(:portfolio) { Portfolio.create(client: client, custodian: custodian, code: "CASH", name: "Cash") } 
    let(:user) { FactoryGirl.create(:user) } 

    context 'under a portfolio' do 
    it "will return total net asset value and liquidity" do 
     Security.create(description: "first security") 
     Security.create(description: "second security") 

     portfolio = Portfolio.create(client: client, custodian: custodian, code: "BALANCED", name: "Balanced") 
     Product.create(product_type: product_discount, name: "Bank Bills", liquid: true) 
     RateSheetCategory.create(bank: bank, product: Product.first, name: :Large) 

     rscb = RateSheetCategory.first 
     rsct = RateSheetCategory.last 

     Term.create(code: 30, name: "30 Days") 
     Term.create(code: 60, name: "60 Days") 
     Term.create(code: 90, name: "90 Days") 
     Term.create(code: 120, name: "120 Days") 
     Term.create(code: 180, name: "180 Days") 
     Term.create(code: 360, name: "360 Days") 

     rate1b = Rate.create(rate_sheet_category: rscb, date: "2017-03-01", rate: 0.0235, term: Term.find_by(code: 180)) 
     rate2b = Rate.create(rate_sheet_category: rscb, date: "2017-03-01", rate: 0.0245, term: Term.find_by(code: 60)) 

     Deal.create(portfolio: portfolio, security: Security.first, amount: 2000000, transaction_type: 'P', deal_date: "2016-10-02", maturity_date: "2017-04-02", rate: rate1b, user: user) 
     Deal.create(portfolio: portfolio, security: Security.find(2), amount: 1500000, transaction_type: 'P', deal_date: "2016-11-14", maturity_date: "2016-12-14", rate: rate2b, user: user) 

     nav = portfolio.nav_at("2017-03-01") 
     liquidity = portfolio.liquidity_at("2017-03-01") 

     expect(nav.round(2)).to eq(43482525.12) 
     expect(liquidity.round(2)).to eq(42481440.19) 
    end 
end 
end 
+4

Sie sollten http://betterspecs.org/ durchlesen, um Best Practices zum Schreiben von Testfällen zu verstehen. – Pramod

Antwort

0

Das sieht aus wie ein Riese, End-to-End-Integrationstest, also entweder Ihren Code ist alles in einem Verfahren zugeschlagen, oder Ihr nicht richtig Einheit Ihre Methoden zu testen.

Ihr erster Schritt bei der Verbesserung Ihrer Spezifikationen sollte mit den oben genannten Problemen korrelieren. Teilen Sie Ihren Code in kleinere Methoden auf, die Sie direkt testen können, und/oder testen Sie Ihre individuellen öffentlichen Methoden.

Verwandte Themen