我是新手做出反应并且无法找到如何使用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);
}
}
感谢任何帮助
答案 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()结构的每个部分。