2016-07-14 4 views
2

ich die folgende Klasse habe, dass ich für eine spec zu schreiben versuchen:RAISE_ERROR spec nicht wahr Rückkehr in Rspec 3.4

module IntegrationError 
    class Error < StandardError; end 
    class BadRequest < IntegrationError::Error; end 
    class LogicProblem < IntegrationError::Error; end 

    def raise_logic_error!(message) 
    raise IntegrationError::LogicProblem, message 
    rescue => e 
    Rails.logger.error e.message 
    e.backtrace.each do |line| 
     Rails.logger.error line if line.include?('integrations') 
    end 
    end 

    def raise_bad_request!(message) 
    raise IntegrationError::BadRequest, message 
    end 

    def log_bad_request!(message) 
    Rails.logger.info message 
    end 
end 

mit spec

RSpec.describe 'IntegrationError', type: :integration do 
    let!(:klass) { Class.new { include IntegrationError } } 

    describe '#log_bad_request!' do 
    it 'logs it' do 
     expect(klass.new.log_bad_request!('TESTME')).to be_truthy 
    end 
    end 

    describe '#raise_bad_request!' do 
    it 'raises it' do 
     binding.pry 
     expect(klass.new.raise_bad_request!('TESTME')).to raise_error 
    end 
    end 
end 

der raise_bad_request Test gibt den Fehler statt von wahr. Hat jemand Gedanken darüber, wie man das besser schreibt?

Ich verwende Rails 4 und Rspec 3.4.

Antwort

3

Siehe Für die raise_error Matcher benötigen Sie einen Block passieren zu erwarten anstelle eines Wertes:

expect { klass.raise_bad_request!('TESTME') }.to raise_error

das sollte es tun!

4

Wenn ich mich richtig erinnere, ich glaube, Sie brauchen die Erwartung, einen Block, wenn der Anhebung, wie dies passieren:

describe '#raise_bad_request!' do 
    it 'raises it' do 
    binding.pry 
    expect{klass.new.raise_bad_request!('TESTME')}.to raise_error 
    end 
end 

docs here

+1

yep, du bist richtig! –

Verwandte Themen