Nik*_*ykh 2 javascript jasmine jestjs
我是测试的初学者,并开始使用 jest。我的这个函数将数据保存在 chrome.storage.local 中,我想测试 chrome.storage.local 是否调用了 3 次。这是函数:
saveData: function(){
  chrome.storage.local.set({'blackList': bgModule.blackList}, function() {});
  chrome.storage.local.set({'pastDays': bgModule.pastDays}, function() {});
  chrome.storage.local.set({'websiteList': bgModule.websiteList}, function() {});
}
这是我的测试:
const bgModule = require("../../app/Background/background.js");
const chrome = {
  storage: {
    local: {
      set: function() {},
      get: function() {}
    }
  }
};
let blackListStub = bgModule.blackList;
let pastDaysStub = [
  {day: "day1"},
  {day2: "day2"},
  {day3: "day3"}];
let websiteListStub = [
  {websiteName: "facebook.com"},
  {websiteName: "stackoverflow.com"},
  {websiteName: "github.com"}];
it ("should save data in local storage", () => {
  spyOn(bgModule, 'saveData');
  bgModule.saveData();
  const spy = spyOn(chrome.storage.local, 'set');
  spy({'blackList' : blackListStub});
  spy({'pastDays' : pastDaysStub});
  spy({'websiteList' : websiteListStub});
  expect(spy).toHaveBeenCalledWith({'blackList' : blackListStub});
  expect(spy).toHaveBeenCalledWith({'pastDays' : pastDaysStub});
  expect(spy).toHaveBeenCalledWith({'websiteList' : websiteListStub});
  expect(bgModule.saveData).toHaveBeenCalledTimes(1);
  expect(spy).toHaveBeenCalledTimes(3);
});
测试通过,但不正确。我想让它工作,所以当我更改 saveData 时,它会破坏测试。我的测试已将所有内容硬编码到其中,并且根本不依赖于 saveData。我查找了示例和教程材料,但找不到与此案例相关的任何内容。我应该采取的任何帮助或方向都会非常有帮助。
在使用 global.chrome 重构测试的帮助和正确答案之后,如下所示:
it ("should save data in local storage", () => {
  bgModule.saveData();
  expect(chrome.storage.local.set).toHaveBeenCalledTimes(3);
});  
最简单的方法是使用依赖注入,因此不是chrome.storage.local直接调用,而是将其作为参数传递给您的函数,然后可以轻松地在您的测试中被模拟替换。
另一种方法是将其作为全局变量添加到您的测试环境中,如下所示:
const get = jest.fn()
const set = jest.fn()
global.chrome = {
  storage: {
    local: {
      set,
      get
    }
}
| 归档时间: | 
 | 
| 查看次数: | 772 次 | 
| 最近记录: |