在测试认证Merb的文件上传
-
12-09-2019 - |
题
这是一些已经快把我逼疯了,在过去的几天。我有一个动作,它允许通过验证的用户资源上传到该网站。我知道控制器操作是正确的,因为我可以通过过程手动运行但是我想用RSpec的测试它。
我不得不使用辅助request
所以可以重复使用的认证会话,其为这组测试一个:given
。
it "should allow authenticated file uploads" do
file = File.open(a_valid_file)
mock_file = mock("file")
mock_file.stub!(:path).and_return(file.path)
request( resource(:assets), :method => "POST",
:params => { :file =>
{:tempfile => mock_file, :filename => File.basename(file.path)} }
)
end
如果我断点所有作品很好的规范里面,但是当我运行规范,并尝试通过调试器来访问控制器操作的路径,我得到这样的:
e file[:tempfile].path
NoMethodError Exception: undefined method `path' for "#[Spec::Mocks::Mock:0x3fda2a4736c0 @name=\"file\"]":String
我的猜测是,stub!(:path)
没有被置位为任何模拟对象通过请求使它。
现在的问题是:我要对测试文件上传正确的方式,如果没有什么法子
?解决方案
我是做错了。通过使用request
有人呼吁所有PARAMATERS to_s,所以我的模仿对象是为“#[规格::嘲笑::模拟:0x3fda2a4736c0 @name = \”文件\“]”被传递。这将教我更注重的异常输出。
相反,我应该使用multipart_post
和存根出在一个块中的认证调用。
it "should allow authenticated file uploads" do
file = File.open(a_valid_file)
multipart_post( resource(:assets), :method => "POST",
:params => { :file => file } ) do |controller|
controller.stub!(:ensure_authenticated).and_return(true)
controller.session.stub!(:user).and_return(User.first)
)
end
不隶属于 StackOverflow