2016-06-27 3 views
0

Кто-нибудь понимает, почему ожидаемое ниже игнорирование сообщения аргумента, считая его переданным в виде строки?RSpec ожидания игнорирования аргумента сообщения

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 

контроллер

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 

предупреждающее сообщение

.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

это то же самое, если вы разбили на 2 предпологает: be_present и .eq? –

+0

Yup. Это прекрасно работает. Просто хотел узнать, не является ли это синтаксисом и почему. Идем с этим вариантом пока. Спасибо – vinibol12

ответ

1

Это не является допустимым использование Rspec. Вы предполагаете, что to способен обрабатывать 2 или более ожиданий.

Вы должны разделить их

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

Однако ваш код также избыточно. Если сообщение равно строке, это наверняка присутствует. Следовательно, первое ожидание совершенно бесполезно.

Просто добавьте

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

Я согласен с тобой @Simone Carletii. Я осознал эту избыточность вчера. Я держал только вторую строчку, как вы предложили. – vinibol12

+0

«Вы предполагаете, что способны справиться с двумя или более ожиданиями». Разве это не ожидалось, что вы сказали выше? https://www.relishapp.com/rspec/rspec-expectations/v/3-4/docs/compound-expectations. Я согласен с тем, что если есть строка как flash, она, следовательно, присутствует. Но в другом случае, когда вам может потребоваться передать 2 ожидания на #, тогда синтаксис выше, похоже, сработает. – vinibol12

+0

Синтаксис для сложных ожиданий определенно отличается от вашего примера. –

1

Второй аргумент для сообщения пользовательских отказов:

https://www.relishapp.com/rspec/rspec-expectations/v/3-4/docs/customized-message

Но, похоже, вы пытаетесь совместить два ожидания. Для этого вам нужно будет использовать синтаксис соединения:

https://www.relishapp.com/rspec/rspec-expectations/v/3-4/docs/compound-expectations

Смежные вопросы