这是过去几天让我发疯的事情。我有一个允许经过身份验证的用户将资产上传到站点的操作。我知道控制器操作是正确的,因为我可以手动运行该过程,但是我想使用 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)
没有为通过请求的任何模拟对象设置。
问题是:我是否正在使用正确的方法来测试文件上传,如果不是,还有什么方法?