Wie funktioniert ein stub Versprechen mit sinon?
Ich habe einen Daten-Dienst mit der folgenden Funktion
function getInsureds(searchCriteria) {
var deferred = $q.defer();
insuredsSearch.get(searchCriteria,
function (insureds) {
deferred.resolve(insureds);
},
function (response) {
deferred.reject(response);
});
return deferred.promise;
}
Ich testen möchte folgende Funktion:
function search ()
{
dataService
.getInsureds(vm.searchCriteria)
.then(function (response) {
vm.searchCompleted = true;
if (response.insureds.length > 100) {
vm.searchResults = response.insureds.slice(0, 99);
} else {
vm.searchResults = response.insureds;
}
});
}
Wie würde ich das stub-das Versprechen also, dass wenn ich Anrufe, getInsureds es würde lösen das Versprechen und Rückkehr mir die Ergebnisse sofort. Ich begann wie folgt aus (Jasmin-test), aber ich komme nicht weiter, da ich nicht weiß, wie Sie zu beheben Versprechen und übergeben Sie Argumente benötigt.
it("search returns over 100 results searchResults should contain only 100 records ", function () {
var results103 = new Array();
for (var i = 0; i < 103; i++) {
results103.push(i);
}
var fakeSearchForm = { $valid: true };
var isSearchValidStub = sinon.stub(sut, "isSearchCriteriaValid").returns(true);
var deferred = $q.defer();
var promise = deferred.promise;
var dsStub = sinon.stub(inSearchDataSvc, "getInsureds").returns(promise);
var resolveStub = sinon.stub(deferred, "resolve");
//how do i call resolve and pass in results103
sut.performSearch(fakeSearchForm);
sinon.assert.calledOnce(isSearchValidStub);
sinon.assert.calledOnce(dsStub);
sinon.assert.called(resolveStub);
expect(sut.searchResults.length).toBe(100);
});
InformationsquelleAutor der Frage epitka | 2013-12-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie nur lösen die Versprechen dass vor dem aufrufen der Suchfunktion. Auf diese Weise werden Ihre stub zurück gelöst Versprechen und
then
sofort angerufen. Also anstattwerden Sie lösen, die latente, die mit Ihren fake-response-Daten
InformationsquelleAutor der Antwort Andreas Köberle
Zur aktuellen sinon version v2.3.1 können Sie
stub.resolves(value)
undstub.rejects(value)
FunktionBeispielsweise können Sie stub myClass.myFunction mit dem folgenden code
oder
InformationsquelleAutor der Antwort Yu Huang
Ich hatte eine ähnliche situation und die akzeptierten Antworten und Kommentare waren nicht arbeitet, sondern zusammen mit diese Frage Sie half mir lösen diese in der folgenden Weise. Ich hoffe, es ist hilfreich für jemanden.
InformationsquelleAutor der Antwort Wtower
Gibt es eine weitere alternative, die ich gefunden. Viel Schmerz freier als andere Methoden.
Können Sie das npm-Paket: sinon-stub-Versprechen.
Es abstrahiert viel von den details, so dass Sie nicht haben, um das Rad neu erfinden. Geholfen, mein schreiben, meine tests nach dem Kampf zu simulieren, die ein Versprechen für lange.
Hoffe, es hilft!
InformationsquelleAutor der Antwort tbking
Auch Sie können etwas tun, wie dieses:
InformationsquelleAutor der Antwort aH6y