Mam usługi danych z następujących funkcjiW jaki sposób jedna obietnica z sinonem?
function getInsureds(searchCriteria) {
var deferred = $q.defer();
insuredsSearch.get(searchCriteria,
function (insureds) {
deferred.resolve(insureds);
},
function (response) {
deferred.reject(response);
});
return deferred.promise;
}
Chcę przetestować następujące czynności:
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;
}
});
}
Jak bym skrótową obietnicę tak, że gdy zgłoszę getInsureds byłoby rozwiązać obietnicę i powrotu mi wyniki natychmiast. Zacząłem w ten sposób (test jaśminowy), ale utknąłem, ponieważ nie wiem, jak rozwiązać obietnicę i przekazać potrzebne argumenty.
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);
});
ten nie zgadza się z obietnicami, których obecnie używamy. [Promises/A + say] (https://promisesaplus.com/) "onFulfilled lub onRejected nie mogą być wywoływane, dopóki stos kontekstowy wykonania nie zawiera tylko kodu platformy". – Kos
Tak właśnie to zrobiłem: 'var resolveStub = sinon.stub (odroczone," postanowienie "). Zwraca ({then: function() {}});' –