测试从控制器创建方法
问题描述:
我期待在我的控制器中测试我的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 }
是这里有什么区别,我应如何检测呢?
而且还当我尝试和测试闪光的成功已经设置(使用早该宝石)
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
任何建议/帮助赞赏
感谢
答
您的测试方法,另一种是,在第一种情况下,你要测试的模式,而在第二种情况下,你要测试的控制器之间的差异。另外,验证应该在模型上进行测试;闪光消息和动作行为,在控制器内。
-
我认为你不打电话给你的
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
返回任何结果。
谢谢您的回答,我有一个'create.js.erb'文件,该文件规定在一个div中的Flash消息..我不断收到'ActionController :: UnknownFormat:'当运行你的例子 – Richlewis
好吧,现在有一些调整,改变'expect(flash.now [:success] .now).to be_present 'to'expect(flash [:success])。to be_present'并且在后续操作中添加了'format::js' – Richlewis
为什么你需要'js'格式?不应该使用纯文本或html文本?它是否允许'jsonp' ajax请求? – Wikiti