2017-12-15 5 views
0

ich einen Namen Fehler für eine kleine API immer ich mit RSpec bin Gebäude, TDD-MethodikRSpec - nicht initialisierte Konstante zum Beispiel Doppel

NameError: 
    uninitialized constant ExpenseTracker::API::Ledger 

API.rb

require "sinatra/base" 
require "json" 

module ExpenseTracker 
    class API < Sinatra::Base 

def initialize(ledger: Ledger.new) # default value so callers can just say API.new and get the default 
    @ledger = ledger 
    super() # rest of initialization from Sinatra 
end 

# Later, callers do this ledger: Ledger.new 
app = API.new() 

post '/expenses' do 
    JSON.generate('expense_id' => 42) 
end 

get '/expenses/:date' do 
    JSON.generate([]) 
end 
end 
end 

api_spec.rb mit

require_relative "../../../app/api" 
require "rack/test" 

module ExpenseTracker 

RecordResult = Struct.new(:success?, :expense_id, :error_message) 

RSpec.describe API do 
include Rack::Test::Methods 

def app 
    API.new(ledger: ledger) 
end 

let(:ledger) { instance_double('ExpenseTracker::Ledger') } 

describe "POST /expense" do 
    context "when the expenseis successfully recorded" do 
    it 'returns the expense id'do 
     allow(ledger).to receive(:record) 
     .with(expense) 
     .and_return(RecordResult.new(true, 417, nil)) 

    post '/expense', JSON.generate(expense) 

    parsed = JSON.parse(last_response.body) 
    expect(parsed).to include('expense_id': 417) 
    end 
    it 'responds with a 200 (OK)' 
    end 

    context "when the expense fails validation" do 
    it 'returns an error message' 
    it 'responds with 422 (Unprocessable entity)' 
    end 

end 
end 
end 

Unten ist der Fehler, ich bin immer:

An error occurred while loading ./api_spec.rb. 
Failure/Error: 
    def initialize(ledger: Ledger.new) # default value so callers can just say API.new and get the default 
    @ledger = ledger 
    super() # rest of initialization from Sinatra 
    end 

NameError: 
    uninitialized constant ExpenseTracker::API::Ledger 

/Users/Denis/Desktop/TDD/Effective_Testing_with_Rspec3/04-acceptance-specs/expense_tracker/app/api.rb:7:in `initialize' 
/Users/Denis/Desktop/TDD/Effective_Testing_with_Rspec3/04-acceptance-specs/expense_tracker/app/api.rb:13:in `<class:API>' 
/Users/Denis/Desktop/TDD/Effective_Testing_with_Rspec3/04-acceptance-specs/expense_tracker/app/api.rb:5:in `<module:ExpenseTracker>' 
/Users/Denis/Desktop/TDD/Effective_Testing_with_Rspec3/04-acceptance-specs/expense_tracker/app/api.rb:4:in `<top (required)>' 
./api_spec.rb:1:in `require_relative' 
./api_spec.rb:1:in `<top (required)>' 

Fehle ich etwas? Ich habe versucht, mit dem Übergeben des Hauptbuchs herumzuspielen: Ledger.new zu app = API.new aber nicht diesen Fehler überholend.

jede Hilfe oder Ideen wäre großartig!

Antwort

0

Ok, ich dachte mir das hier aus, nach viel Kopfschlagen auf dem Schreibtisch.

Ich musste die App = API.new auskommentieren, da dies noch nicht implementiert ist, jedes Mal, wenn ich die Datei in die Spezifikation laden würde, würde es mich aus der Fassung bringen.

# Later, callers do this ledger: Ledger.new 
app = API.new() 

jetzt zum nächsten Fehler spec lol!

Verwandte Themen