Javascript 如何开玩笑地测试函数? const updateSession=async(发射器、dbModel、中心id、会话id、数据)=>{ if(等待dbModel.update('session',{center\u id,session\u id,data})){ 常数结果={ 中心id:`k${center\U id}`, 会话id:会话id, …数据 } ; emit('updateSession'{ 操作类型:“更新”, 操作on:“会话”, 数据:结果 }) ; }否则抛出新错误(“500内部服务器错误”); }
Javascript 如何开玩笑地测试函数? const updateSession=async(发射器、dbModel、中心id、会话id、数据)=>{ if(等待dbModel.update('session',{center\u id,session\u id,data})){ 常数结果={ 中心id:`k${center\U id}`, 会话id:会话id, …数据 } ; emit('updateSession'{ 操作类型:“更新”, 操作on:“会话”, 数据:结果 }) ; }否则抛出新错误(“500内部服务器错误”); },javascript,unit-testing,jestjs,Javascript,Unit Testing,Jestjs,发射器是一个事件发射器 dbModel是一个与数据库交互的模块 center\u id是一个数字 session\u id是一个字符串 以上所有内容在所有情况下都是相同的 我需要用3个不同的例子来测试这个功能 案例1:data={available_capacity 1:4,available_capacity 2:6} 案例2:data={可用容量1:4} 案例3:data={可用容量2:6} 条件: 在案例1中,如果数据传递给事件回调,则测试应通过 侦听器,即:emitter.on('upd
发射器
是一个事件发射器
dbModel
是一个与数据库交互的模块
center\u id
是一个数字
session\u id
是一个字符串
以上所有内容在所有情况下都是相同的
我需要用3个不同的例子来测试这个功能
案例1:data={available_capacity 1:4,available_capacity 2:6}
案例2:data={可用容量1:4}
案例3:data={可用容量2:6}
条件:
在案例1中,如果数据传递给事件回调,则测试应通过
侦听器,即:emitter.on('updateSession',callback)
,具有这两种功能
可用容量1
和可用容量2
数据中的属性。结果
反对
在案例2中,如果数据传递给事件回调,则测试应通过
侦听器在数据中只有可用\u capacity 1
属性。结果
对象
在案例3中,如果数据
传递给事件回调,则测试应通过
侦听器在数据中只有可用\u capacity2
属性。结果
对象
我想知道如何为上述案例开玩笑地编写测试
非常感谢您提供的任何帮助。要在玩笑中测试回调函数,您应该使用其测试函数的另一种形式,即在确定测试已结束时使用您调用的回调参数。更多信息请点击此处:
下面是一个关于如何实现您的特定测试用例的示例,这些当然不是完美的,但应该让您了解如何自己实现它们
test('callback data has available_capacity1 and available_capacity2', done => {
const data = { available_capacity1: 4, available_capacity2: 6 };
const emitter = new EventEmitter();
emitter.once('updateSession', arg => {
try {
expect(arg.data).toHaveProperty('available_capacity1');
expect(arg.data).toHaveProperty('available_capacity2');
done();
} catch (error) {
done(error);
}
});
updateSession(emitter, dbModel, center_id, session_id, data);
});
test('callback data has only available_capacity1', done => {
const data = { available_capacity1: 4 };
const emitter = new EventEmitter();
emitter.once('updateSession', arg => {
try {
expect(Object.keys(arg.data).length).toBe(1);
expect(arg.data).toHaveProperty('available_capacity1');
done();
} catch (error) {
done(error);
}
});
updateSession(emitter, dbModel, center_id, session_id, data);
});
test('callback data has only available_capacity2', done => {
const data = { available_capacity2: 6 };
const emitter = new EventEmitter();
emitter.once('updateSession', arg => {
try {
expect(Object.keys(arg.data).length).toBe(1);
expect(arg.data).toHaveProperty('available_capacity2');
done();
} catch (error) {
done(error);
}
});
updateSession(emitter, dbModel, center_id, session_id, data);
});
要在jest中测试回调函数,您应该使用其测试函数的另一种形式,即在确定测试已结束时使用您调用的回调参数。更多信息请点击此处:
下面是一个关于如何实现您的特定测试用例的示例,这些当然不是完美的,但应该让您了解如何自己实现它们
test('callback data has available_capacity1 and available_capacity2', done => {
const data = { available_capacity1: 4, available_capacity2: 6 };
const emitter = new EventEmitter();
emitter.once('updateSession', arg => {
try {
expect(arg.data).toHaveProperty('available_capacity1');
expect(arg.data).toHaveProperty('available_capacity2');
done();
} catch (error) {
done(error);
}
});
updateSession(emitter, dbModel, center_id, session_id, data);
});
test('callback data has only available_capacity1', done => {
const data = { available_capacity1: 4 };
const emitter = new EventEmitter();
emitter.once('updateSession', arg => {
try {
expect(Object.keys(arg.data).length).toBe(1);
expect(arg.data).toHaveProperty('available_capacity1');
done();
} catch (error) {
done(error);
}
});
updateSession(emitter, dbModel, center_id, session_id, data);
});
test('callback data has only available_capacity2', done => {
const data = { available_capacity2: 6 };
const emitter = new EventEmitter();
emitter.once('updateSession', arg => {
try {
expect(Object.keys(arg.data).length).toBe(1);
expect(arg.data).toHaveProperty('available_capacity2');
done();
} catch (error) {
done(error);
}
});
updateSession(emitter, dbModel, center_id, session_id, data);
});
您想要做的不是单元测试,因此不鼓励这样做。您想测试传递给emitter.on()
的回调,但您正在另一个文件中进行测试。不是回调,而是传递到回调的数据。这是函数的结果。您想要做的不是单元测试,因此不鼓励这样做。您想测试传递给emitter.on()
的回调,但您正在另一个文件中进行测试。不是回调,而是传递到回调的数据。哪个是函数的结果?我应该使用断言来查看是否至少有一个expect语句ryt?或者不发出事件将使函数通过?我应该使用断言来查看是否至少有一个expect语句ryt?或者不发出事件将使函数通过?