如何解决如何正确模拟套接字连接以模拟各种 on.('data' 事件
我正在测试一种方法,该方法根据从套接字过滤的数据返回一个 Promise:
async readData(sConn) {
if(!sConn) {
throw new Error('READ_SOCK_ERROR');
}
let rawData;
return new Promise((resolve,reject) => {
sConn.on('data',async (data) => {
try {
rawData = data.toString();
return resolve(rawData);
} catch (error) {
return reject(new Error(`Error reading response. Details: ${error.stack}`));
}
}
}
}
如何正确模拟套接字连接,以便模拟在数据事件中发送的各种数据? 这是我正在使用的,但测试挂起并最终超时....
it('It should not throw error and return simulated data string',async function () {
let result;
let error = false;
let mockedData = 'This is\na simultated response\nfrom the socket';
const sConn = {
on: () => Promise.resolve(mockedData),};
try {
result = await rewiredFileContainingMethodToTest.readData(sConn);
console.log(result);
} catch (err) {
error = err;
console.log('Error caught: '+err);
}
expect(error).to.be.false;
sinon.assert.callCount(sConn.on,1);
expect(result).contains(mockedData);
});
解决方法
您可以使用 stub.callsFake(fakeFunction)
,它使存根在调用时调用提供的 fakeFunction
。
例如
file.js
:
const file = {
async readData(sConn) {
if (!sConn) {
throw new Error('READ_SOCK_ERROR');
}
let rawData;
return new Promise((resolve,reject) => {
sConn.on('data',async (data) => {
try {
rawData = data.toString();
return resolve(rawData);
} catch (error) {
return reject(new Error(`Error reading response. Details: ${error.stack}`));
}
});
});
},};
export { file };
file.test.js
:
import { expect } from 'chai';
import sinon from 'sinon';
import { file } from './file';
describe('65594632',() => {
it('It should not throw error and return simulated data string',async function () {
let mockedData = 'This is\na simultated response\nfrom the socket';
const sConn = {
on: sinon.stub().callsFake(async (event,callback) => {
await callback(mockedData);
}),};
const result = await file.readData(sConn);
sinon.assert.callCount(sConn.on,1);
expect(result).to.be.equal(mockedData);
});
});
单元测试结果:
65594632
✓ It should not throw error and return simulated data string
1 passing (7ms)
----------|---------|----------|---------|---------|-------------------
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s
----------|---------|----------|---------|---------|-------------------
All files | 81.82 | 50 | 100 | 80 |
file.ts | 81.82 | 50 | 100 | 80 | 4,15
----------|---------|----------|---------|---------|-------------------
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。