epi*_*tka 49 javascript jasmine sinon
我有一个具有以下功能的数据服务
function getInsureds(searchCriteria) {
var deferred = $q.defer();
insuredsSearch.get(searchCriteria,
function (insureds) {
deferred.resolve(insureds);
},
function (response) {
deferred.reject(response);
});
return deferred.promise;
}
Run Code Online (Sandbox Code Playgroud)
我想测试以下功能:
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;
}
});
}
Run Code Online (Sandbox Code Playgroud)
我如何保留承诺,以便当我调用getInsureds时它将解决承诺并立即返回结果.我开始像这样(茉莉花测试),但我被卡住了,因为我不知道如何解决诺言并传递所需的参数.
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);
});
Run Code Online (Sandbox Code Playgroud)
Yu *_*ang 59
在当前的sinon版本v2.3.1中,您可以使用stub.resolves(value)和stub.rejects(value)运行
例如,您可以使用以下代码将myClass.myFunction存根
sinon.stub(myClass, 'myFunction').resolves('the value you want to return');
Run Code Online (Sandbox Code Playgroud)
要么
sinon.stub(myClass, 'myFunction').rejects('the error information you want to return');
Run Code Online (Sandbox Code Playgroud)
And*_*rle 23
您只需在调用搜索功能之前解决该承诺.这样,您的存根将返回已解决的承诺,then并将立即调用.而不是
var resolveStub = sinon.stub(deferred, "resolve");
Run Code Online (Sandbox Code Playgroud)
您将使用虚假的响应数据解决延期问题
deferred.resolve({insureds: results103})
Run Code Online (Sandbox Code Playgroud)
我有类似的情况,接受的答案和评论不起作用,但随着这个问题,他们帮助我以下面的方式解决这个问题.我希望它对某人有帮助.
var Promise = require('bluebird');
var deferred = Promise.defer();
stub = sinon.stub(deferred, 'resolve').returns(deferred.promise);
deferred.resolve({data: data});
// or
deferred.reject(new Error('fake error'));
Run Code Online (Sandbox Code Playgroud)
小智 5
你也可以这样做:
import sinon from 'sinon';
const sandbox = sinon.sandbox.create();
const promiseResolved = () => sandbox.stub().returns(Promise.resolve('resolved'));
const promiseRejected = () => sandbox.stub().returns(Promise.reject('rejected'));
const x = (promise) => {
return promise()
.then((result) => console.log('result', result))
.catch((error) => console.log('error', error))
}
x(promiseResolved); // resolved
x(promiseRejected); // rejected
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
55438 次 |
| 最近记录: |