我希望在我的控制器中测试我的create
方法,检查我的验证和flash消息是否设置正确。到目前为止我所拥有的是
it 'is invalid with invalid formatted email' do
@message = Message.new(FactoryGirl.attributes_for(:message_invalid_email))
@message.valid?
expect(@message.errors[:email].first).to eq("Don't forget to add your email address")
end
但我看到其他人设置了他们的测试,如
@message = post :create, message: { params1: value1 }
这里有什么不同,我应该如何测试呢?
当我尝试测试已经设置了闪光成功时(使用shoulda gem)
it 'is valid with correct parameters' do
@message = Message.new(FactoryGirl.attributes_for(:valid_message))
expect(@message).to be_valid
expect(controller).to set_flash[:success]
end
我收到此错误
Expected the flash[:success] to be set, but no flash was set
这是我的控制器
def create
@message = Message.new(message_params)
respond_to do |format|
if @message.valid?
format.js { flash.now[:success] = "Thanks for your message, I'll be in touch soon" }
else
format.js { flash.now[:alert] }
end
end
end
答案 0 :(得分:1)
您的测试方法与另一种测试方法之间的区别在于,在第一种情况下,您正在测试模型,在第二种情况下,您正在测试控制器即可。此外,应在模型上测试验证;控制器内的闪存消息和操作行为。
我认为您没有使用create
致电expect(controller).to set_flash[:success]
行动。也许你应该尝试类似下面的块:
it 'is valid with correct parameters' do
post :create, message: { params1: value1 } # Whatever POST action
expect(flash.now[:success].now).to be_present
end
您的控制器是否按预期工作? format.js
正在返回一个字符串(flash.now[:success]
或flash.now[:alert]
而不是javascript代码。也许您应该使用format.text
,或者不使用render status: :created, nothing: true
返回任何内容。