Tôi có một dịch vụ dữ liệu với chức năng sauLàm thế nào để một lời hứa với sinon?
function getInsureds(searchCriteria) {
var deferred = $q.defer();
insuredsSearch.get(searchCriteria,
function (insureds) {
deferred.resolve(insureds);
},
function (response) {
deferred.reject(response);
});
return deferred.promise;
}
Tôi muốn thử nghiệm chức năng sau:
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;
}
});
}
Làm thế nào tôi sẽ còn sơ khai hứa hẹn để khi tôi gọi getInsureds nó sẽ giải quyết lời hứa và trở lại cho tôi kết quả ngay lập tức. Tôi bắt đầu như thế này (thử nghiệm hoa nhài), nhưng tôi bị mắc kẹt, vì tôi không biết làm thế nào để giải quyết lời hứa và vượt qua trong các đối số cần thiết.
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);
});
này không đồng ý với những lời hứa chúng tôi đang sử dụng ngày nay. [Lời hứa/A + nói] (https://promisesaplus.com/) "onFulfilled hoặc onRejected không được gọi cho đến khi ngăn xếp ngữ cảnh thực thi chỉ chứa mã nền tảng". – Kos
Thực ra, đây là cách tôi đã làm: 'var resolveStub = sinon.stub (hoãn lại," giải quyết "). Return ({then: function() {}});' –