Testen authentifiziert das Hochladen von Dateien in merb
-
12-09-2019 - |
Frage
Das ist etwas, das ich verrückt in den letzten paar Tagen wurde die Fahrt. Ich habe eine Aktion, die den authentifizierten Benutzer ermöglicht Vermögenswerte auf die Website hochzuladen. Ich weiß, dass die Controller-Aktion korrekt ist, wie ich manuell durch den Prozess laufen kann jedoch ich es mit rspec testen möchten.
Ich habe den request
Helfer verwenden, so dass ich eine authentifizierte Sitzung wiederverwenden kann, die ein :given
für diesen Satz von Tests ist.
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
Wenn ich in der spec Breakpoint alles funktioniert gut, aber wenn ich die spec laufen und versuchen, den Weg in die Controller-Aktion durch den Debugger zugreifen ich dieses:
e file[:tempfile].path
NoMethodError Exception: undefined method `path' for "#[Spec::Mocks::Mock:0x3fda2a4736c0 @name=\"file\"]":String
Meine Vermutung ist, dass der stub!(:path)
nicht für Objekt, was auch immer mock gesetzt zu sein, wird durch den Antrag zu machen.
Die Frage ist: Werde ich über den richtigen Weg für die Prüfung von Dateiuploads und wenn nicht, was ist eine andere Art und Weise
?Lösung
ich tat es falsch. Durch die Verwendung von request
es rief to_s auf alle Paramater, so meine Mock-Objekt als "# [Spec :: Mocks :: Mock: 0x3fda2a4736c0 @name = \" übergeben wurde Datei \ "]". Das wird mir beibringen, mehr Aufmerksamkeit auf Ausnahme Ausgabe zu zahlen.
Stattdessen soll ich multipart_post
verwenden und die Authentifizierung Anrufe in einem Block Stub.
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