Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
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 - Fatal编程技术网

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?或者不发出事件将使函数通过?