Ich benutze AngularJS und versuche einen Controller zu testen, der eine Fabrik aufruft, um Daten zu bekommen.
Dies ist der Controller-Code:
%Vor%Natürlich möchte ich die Fabrik mit einem Schein tauschen, um zu verhindern, dass eine echte API aufgerufen wird. Ich versuche, $ provider.factory zu verwenden, um die Scheinkopie zu injizieren:
%Vor%Wenn ich diesen Test mit Karma durchführe, schätze ich diesen Fehler:
%Vor%Ich habe viele verschiedene Permutationen ausprobiert, z. B. das Entfernen der Beschriftung, das Übergeben eines Objekts oder eines einfachen Werts anstelle einer Funktion, und keiner von ihnen hat funktioniert.
Die Dokumentation ( Ссылка . $ zur Verfügung stellen) zeigt, dass ich die factory () Methode mit factory (name , $ getFn), wobei name eine Zeichenkette und $ getFn eine Funktion ist. Das mache ich, aber es funktioniert nicht.
Alles was ich verpasst habe? Kann jemand $ Jasmine-Unit-Tests richtig verwenden?
Danke
Aktualisierung: Ich habe einen ähnlichen Plunkr gefunden, der ein Problem ähnlich dem hier gelöst hat: stackoverflow.com/questions/19297258/why-is-provide-only-available-in-the-angular-mock-module-function-and-q-onl
Ich habe meinen eigenen Plunkr mit diesem Code erstellt, aber mit dem Testcode in JS statt Coffee und habe es zur Arbeit gebracht: plnrkr.co/edit/gfBzMXpKdJgPKnoyJy5A?p=preview
Nun habe ich den JS-Code manuell in Coffee: plnkr.co/edit/qGGMayFjJoeYZyFKPjuR?p=preview konvertiert Der Fehler ist zurück, also ist der Kaffeecode falsch, aber der js-Code funktioniert.
Die Antwort auf meine Frage gefunden.
Da CoffeeScript immer das Ergebnis der letzten Anweisung zurückgibt, gibt CoffeeScript in diesem Fall $ provide innerhalb von modul () zurück, was falsch ist. Eine einfache Möglichkeit, das zu beheben, besteht darin, einfach eine Rückgabeanweisung nach $ bereit hinzuzufügen, wie folgt:
%Vor%Ich hoffe, dass das einem anderen hilft.
Tags und Links angularjs unit-testing coffeescript