Reactjs 如何使用jest测试条件是否正确

Reactjs 如何使用jest测试条件是否正确,reactjs,jestjs,Reactjs,Jestjs,我是新手,无法找到如何使用jest完成下面提到的函数的代码覆盖率 为了清晰起见,我创建了一个与我正在使用的功能类似的功能: setName: function setName () { var storage = localStorage.getItem(user); var session = sessionStorage.getItem(temp); if ((session === null || session === undefined) && (stor

我是新手,无法找到如何使用jest完成下面提到的函数的代码覆盖率

为了清晰起见,我创建了一个与我正在使用的功能类似的功能:

setName: function setName () {
  var storage = localStorage.getItem(user);
  var session = sessionStorage.getItem(temp);

  if ((session === null || session === undefined) && (storage === null && storage === undefined)) {
    var name = "window.name";

    if (name  === 'John') {
      changeName(name);
    } else if (name === 'Jane') {
      changeName(name);
    } else if (name  === 'Mark') {
      changeName(name);
    } else {
      changeName('John');
    }
  } else if (session !== null) {
    changeName(session);
  } else if (storage !== null) {
    changeName(storage);
  }
}

非常感谢您的帮助

您需要能够指定名称“John”、“Jane”等。要对示例执行此操作,您需要在运行测试之前将适当的数据保存到本地存储和会话存储中

在测试文件中:

localStorage.setItem('John');
sessionStorage.setItem('A Session');
// do the test now and test what you expect to get back when the user is John.

localStorage.setItem('Jane');
// do the test now and test what you expect to get back when the user is Jane.
如果测试的结果是基本的,并且您可以简单地进行foreach或类似的测试,那么可以使用循环和数组进行测试

testData = [
    { Name: 'John', Result: true},
    { Name: 'Jane', Result: false}
];

testData.forEach(function(testItem) {
    expect(setName(testItem.Name)).toBe(testItem.Result);
}

另一个选项是将对本地和会话存储的访问从函数setName中移出,然后在代码中使用依赖项注入或其他函数来获取这些值。然后,您可以设置一个模拟或伪函数,用于返回存储的数据,该存储返回硬设置的文字数据,以测试if结构的每个部分。

请修复代码格式。localStorage.setItem'John';sessionStorage.setItem'A Session';//现在就进行测试,并测试当用户是John时您希望得到的结果。在我的代码中,我正在调用一个私有函数,当这种情况发生时,我不确定如何在testI中执行它,其他人需要了解您正在做什么,并尝试进行测试以更好地帮助您。我的猜测是,您的私人功能正在做其他事情,您需要确保结果发生。这可能是因为填充了不同的本地存储设置,在这种情况下,您的测试需要验证是否保存了正确的数据。私有函数所做的只是将状态设置为此的一行。state.name=nameit在函数中传递;。我为愚蠢的问题道歉,但我甚至无法理解如何在这种情况下编写测试用例。我正在这样做,即“如果本地存储不为null,则在本地存储中将名称设置为名称”,函数{localStorage.setItem'name',john;//我在这里不清楚如何调用函数setname以及期望得到什么};然后我要做的是用你的简短示例更新原始问题,以及你正在尝试做的测试。这样我们可以看到有益健康的问题。很多人会告诉你的一件事是测试你的代码,而不是其他代码。因此,将名称的setItem放入本地存储实际上不需要进行测试,它可以工作。但是,如果您愿意,那么您需要编写测试,首先清空存储或将其设置为null,调用您的函数,从存储中获取值,评估它是否正确。