如何使用jest测试条件

时间:2018-03-07 13:29:20

标签: reactjs jest

我是新手做出反应并且无法找到如何使用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);
  }
}

感谢任何帮助

1 个答案:

答案 0 :(得分:0)

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

在您的测试文件中:

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()结构的每个部分。