RSpec 期望忽略消息参数
RSpec expectation ignoring message 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
控制器
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.
第二个参数用于自定义失败消息:
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
这不是有效的 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!")
有没有人理解为什么下面的期望会忽略参数消息,因为它是作为字符串传递的?
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.
第二个参数用于自定义失败消息:
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
这不是有效的 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!")