模拟chrome.storage.local函数使用Jasmine

Mock chrome.storage.local functions using Jasmine

本文关键字:Jasmine 函数 local chrome storage 模拟      更新时间:2023-09-26

我在一个名为options.js的文件中有以下代码。我需要用茉莉来嘲笑它。我需要测试在调用save函数时是否调用了chrome.storage.local.set

在规范文件中,我有以下代码。但是它没有调用options.js文件中的chrome函数。有人能指出错误吗?

  beforeEach(function() {
    ctrl = new OptionCtrl(scope);
    chrome: {
      storage: {
        local: {
          set: function() {
          }
        }
      }
    }
  });
  it('should call storage on save', function() {
    spyOn(chrome.storage.local, 'set').and.callThrough();
    ctrl.save({data: 'check'}, 'check');
    expect(chrome.storage.local.set).toHaveBeenCalled();
  });

更新1:保存功能实现

  save(data, successMessage) {
    chrome.storage.local.set(data, (error) => {
      if (error) {
        this.status('Error Occurred. Please refresh.', 1000, 100, 'danger');
      } else {
        this.status(successMessage, 1000, 100, 'success');
      }
    });
  }

链接到options.js文件-行:122

茉莉花中的Stubbing很容易,因为:

var chrome = {
  storage: {
    local: {
      set: function() {}
    }
  }
}
function OptionCtrl() {
  this.save = function(data, callbackStr) {
    chrome.storage.local.set(data)
  }
}
describe('OptionCtrl', function() {
  var ctrl;
  beforeEach(function() {
    ctrl = new OptionCtrl({});
  });
  it('calls storage on save', function() {
    spyOn(chrome.storage.local, 'set').and.callThrough();
    var dataStub = {
      data: 'check'
    }
    ctrl.save(dataStub, 'check');
    expect(chrome.storage.local.set).toHaveBeenCalledWith(dataStub);
  });
})
<link href="//safjanowski.github.io/jasmine-jsfiddle-pack/pack/jasmine.css" rel="stylesheet" />
<script src="//safjanowski.github.io/jasmine-jsfiddle-pack/pack/jasmine-2.0.3-concated.js"></script>