2016-06-27 8 views
0

Versteht jemand, warum die Erwartung unten ignoriert die Argument-Nachricht in Anbetracht dessen, dass es als String übergeben wird?RSpec Erwartung ignorieren Nachricht Argument

spec.rb

context 'flash' do 
    context 'fail' do 
    # Changes the admin_user so it has no permission to delete offence 
    it 'flash[:alert]' do 
     admin_user = FactoryGirl.create :admin_user 
     sign_in admin_user 
     delete :destroy, :id => offence.id, :customer_id => offence.job.customer.id 
     expect(flash[:alert]).to(be_present, eq("Deletion failed. Incident can only be deleted by user who created it!")) 
    end 
    end 
end 

der Controller

def destroy 
    @offence = Offence.find(params[:id]) 
    @events = Event.where(sub_type: 'offence').where("parent_data->> 'id' = ?", @offence.id.to_s) 
    if @offence.admin_user == current_user 
    ActiveRecord::Base.transaction do 
    @events.each do |event| 
     event.destroy! 
    end 
    @offence.destroy! 
    redirect_to admin_customer_offences_path(@customer), notice: 'Incident deleted successfully' 
    end 
    else 
    redirect_to admin_customer_offences_path(@customer), alert: 'Deletion failed. Incident can only be deleted by user who created it!' 
    end 
end 

Die Warnmeldung

.WARNING: ignoring the provided expectation message argument (#<RSpec::Matchers::BuiltIn::Eq:0x007fac42c5d4b0 @expected="Incident deleted successfully">) since it is not a string or a proc. 
+0

ist es das gleiche, wenn Sie in 2 erwartet aufgeteilt: be_present und .EQ? –

+0

Yup. Das funktioniert gut. Ich wollte nur wissen, ob das keine gültige Syntax ist und warum. Gehen Sie mit dieser Option für jetzt aber. Danke – vinibol12

Antwort

1

Dies ist keine gültige Rspec Nutzung. Sie gehen davon aus, dass to 2 oder mehr Erwartungen erfüllen kann.

sollten Sie ihnen aufgeteilt

expect(flash[:alert]).to be_present 
    expect(flash[:alert]).to eq("Deletion failed. Incident can only be deleted by user who created it!") 

jedoch Ihren Code auch redundant ist. Wenn die Nachricht einer Zeichenfolge entspricht, ist sie sicher vorhanden. Daher ist die erste Erwartung völlig nutzlos.

Fügen Sie einfach

expect(flash[:alert]).to eq("Deletion failed. Incident can only be deleted by user who created it!") 
+0

Ich stimme dir zu @Simone Carletii. Ich habe die Redundanz von gestern bemerkt. Ich habe nur die zweite Zeile behalten, wie Sie vorgeschlagen haben. – vinibol12

+0

"Sie gehen davon aus, dass es zwei oder mehr Erwartungen erfüllen kann." Ist diese zusammengesetzte Erwartung nicht gegen das, was du oben gesagt hast? https://www.relishapp.com/rspec/rspec-expections/v/3-4/docs/compound-expections. Ich stimme zu, dass wenn eine Schnur als Flash vorhanden ist, sie folglich vorhanden ist. Aber in einem anderen Fall, in dem du 2 Erwartungen an #to übergeben musst, scheint die obige Syntax zu funktionieren. – vinibol12

+0

Die Syntax für zusammengesetzte Erwartungen ist definitiv anders als Ihr Beispiel. –

Verwandte Themen