gpt4 book ai didi

javascript - 如何使用 Sinon 来 stub 发出 REST 请求的调用

转载 作者:行者123 更新时间:2023-12-02 15:21:19 25 4
gpt4 key购买 nike

我正在尝试了解 sinon 和 mocha,我有下面的代码和测试。我正在尝试测试 findAll() 方法,而无需在任何地方实际发出 http 请求。

使用当前代码,我收到错误[TypeError:无法读取未定义的属性“on”]。我不确定如何 stub 或监视 .on 事件。

/models/user.js

'use strict';

const Rest = require('restler');
const Q = require('q');

class User {

static findAll() {
return Q.promise(function(resolve, reject) {

Rest.get('<SOME URL FOR DATA>')
.on('complete', function(data, response) {

if(data instanceof Error) {
return reject(data);
}

return resolve(data);
});
});
}
...
}

module.exports = User;

/test/models/user.js

'use strict';

const expect = require('chai').expect;
const sinon = require('sinon');
const Rest = require('restler');

describe('User model', function() {

var User;

beforeEach(function() {
this.get = sinon.stub(Rest, 'get');
});

afterEach(function() {
Rest.get.restore();
})

it('should not blow up when requiring', function() {
User = require('../../models/user');
expect(User).to.not.be.undefined;
});

describe('findAll()', function() {
it('should return all users', function() {

const expected = [{personId: 1234}, {personId: 1235}];

User.findAll()
.then(function(result) {
console.log('result = ', result);
})
.fail(function(err) {
console.log('err = ', err);
// KEEPS DISPLAYING THIS: err = [TypeError: Cannot read property 'on' of undefined]
})
});
});

});

最佳答案

如前所述,Rest.get() 返回 undefined,而 findAll 方法要求它返回一个 object > 具有 function 类型的 on 属性。借助 sinon,您可以通过使用 stub.returns API 来控制调用时 stub 返回的值。您还需要确保调用传递给 on 方法的回调。您可以使用 stub.yields API 来实现此目的。如果您需要严格并验证附加回调的位置,请使用 stub.callsArgWith(1, Expected)

示例

describe('findAll()', function() {
it('should return all users', function() {
const expected = [{personId: 1234}, {personId: 1235}];
Rest.get.returns({
on:sinon.stub().yields([expected])
});
User.findAll()
.then(function(result) {
console.log('result = ', result);
});
});
});

关于javascript - 如何使用 Sinon 来 stub 发出 REST 请求的调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34030727/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com