Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Socket
Sign inDemoInstall

jest-webextension-mock

Package Overview
Dependencies
Maintainers
1
Versions
56
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

jest-webextension-mock - npm Package Compare versions

Comparing version 3.4.0 to 3.5.0

.vscode/settings.json

75

__tests__/runtime.test.js

@@ -0,1 +1,8 @@

beforeEach(() => {
browser.runtime.sendMessage.mockClear();
browser.runtime.onMessage.addListener.mockClear();
browser.runtime.onMessage.removeListener.mockClear();
browser.runtime.onMessage.hasListener.mockClear();
});
describe('browser.runtime', () => {

@@ -12,2 +19,16 @@ test('connect', () => {

});
test('connect.onMessage listener', done => {
const name = 'CONNECT_NAME';
const listener = jest.fn();
browser.runtime.connect(name).onMessage.addListener(listener);
browser.runtime.sendMessage({ test: 'message' }, done);
expect(listener).toHaveBeenCalledWith({ test: 'message' });
});
test('getURL', () => {
const path = 'TEST_PATH';
expect(jest.isMockFunction(browser.runtime.getURL)).toBe(true);
const respPath = browser.runtime.getURL(path);
expect(respPath).toEqual(path);
expect(browser.runtime.getURL).toHaveBeenCalledTimes(1);
});
test('sendMessage', done => {

@@ -22,14 +43,41 @@ const callback = jest.fn(() => done());

});
test('sendMessage listener', done => {
const listener = jest.fn();
browser.runtime.onMessage.addListener(listener);
browser.runtime.sendMessage({ test: 'message' }, done);
expect(listener).toHaveBeenCalledWith({ test: 'message' });
});
test('sendMessage promise', () => {
return expect(browser.runtime.sendMessage({})).resolves.toBeUndefined();
});
['addListener', 'removeListener', 'hasListener'].forEach(method => {
test(`onMessage.${method}`, () => {
const callback = jest.fn();
expect(jest.isMockFunction(browser.runtime.onMessage[method])).toBe(true);
browser.runtime.onMessage[method](callback);
expect(browser.runtime.onMessage[method]).toHaveBeenCalledTimes(1);
expect(callback).toHaveBeenCalledTimes(0);
});
test(`onMessage.addListener`, () => {
const callback = jest.fn();
expect(jest.isMockFunction(browser.runtime.onMessage.addListener)).toBe(
true
);
browser.runtime.onMessage.addListener(callback);
expect(browser.runtime.onMessage.addListener).toHaveBeenCalledTimes(1);
expect(callback).toHaveBeenCalledTimes(0);
});
test(`onMessage.removeListener`, () => {
const callback = jest.fn();
expect(jest.isMockFunction(browser.runtime.onMessage.removeListener)).toBe(
true
);
browser.runtime.onMessage.removeListener(callback);
expect(browser.runtime.onMessage.hasListener(callback)).toBe(false);
expect(browser.runtime.onMessage.removeListener).toHaveBeenCalledTimes(1);
expect(callback).toHaveBeenCalledTimes(0);
});
test(`onMessage.hasListener`, () => {
const callback = jest.fn();
expect(jest.isMockFunction(browser.runtime.onMessage.hasListener)).toBe(
true
);
browser.runtime.onMessage.addListener(callback);
const returnVal = browser.runtime.onMessage.hasListener(callback);
expect(returnVal).toBe(true);
expect(browser.runtime.onMessage.hasListener).toHaveBeenCalledTimes(1);
expect(callback).toHaveBeenCalledTimes(0);
});
['addListener', 'removeListener', 'hasListener'].forEach(method => {

@@ -44,2 +92,13 @@ test(`onConnect.${method}`, () => {

});
['addListener', 'removeListener', 'hasListener'].forEach(method => {
test(`onInstalled.${method}`, () => {
const callback = jest.fn();
expect(jest.isMockFunction(browser.runtime.onInstalled[method])).toBe(
true
);
browser.runtime.onInstalled[method](callback);
expect(browser.runtime.onInstalled[method]).toHaveBeenCalledTimes(1);
expect(callback).toHaveBeenCalledTimes(0);
});
});
});

@@ -51,2 +51,12 @@ describe('browser.tabs', () => {

});
test('remove', done => {
const callback = jest.fn(() => done());
expect(jest.isMockFunction(chrome.tabs.remove)).toBe(true);
chrome.tabs.remove([1], callback);
expect(chrome.tabs.remove).toHaveBeenCalledTimes(1);
expect(callback).toHaveBeenCalledTimes(1);
});
test('remove promise', () => {
expect(chrome.tabs.remove([1])).resolves.toBeUndefined();
});
test('query', done => {

@@ -91,2 +101,11 @@ const callback = jest.fn(() => done());

});
['addListener', 'removeListener', 'hasListener'].forEach(method => {
test(`onUpdated.${method}`, () => {
const callback = jest.fn();
expect(jest.isMockFunction(browser.tabs.onUpdated[method])).toBe(true);
browser.tabs.onUpdated[method](callback);
expect(browser.tabs.onUpdated[method]).toHaveBeenCalledTimes(1);
expect(callback).toHaveBeenCalledTimes(0);
});
});
});

135

dist/setup.js
'use strict';
// https://developer.chrome.com/extensions/omnibox
var omnibox = {

@@ -22,3 +21,2 @@ setDefaultSuggestion: jest.fn(),

// https://developer.chrome.com/extensions/tabs
var tabs = {

@@ -34,3 +32,2 @@ get: jest.fn(function () {

var info = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
// returns a Port

@@ -46,4 +43,4 @@ return {

},
postMessage: jest.fn()
// TODO: add sender
postMessage: jest.fn() // TODO: add sender
};

@@ -53,3 +50,3 @@ }),

var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
var cb = arguments[1];
var cb = arguments.length > 1 ? arguments[1] : undefined;

@@ -59,8 +56,18 @@ if (cb !== undefined) {

}
return Promise.resolve(props);
}),
remove: jest.fn(function (tabIds, cb) {
if (cb !== undefined) {
return cb();
}
return Promise.resolve();
}),
duplicate: jest.fn(function () {
var id = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
var cb = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {};
return cb(Object.assign({}, { id: id }));
return cb(Object.assign({}, {
id: id
}));
}),

@@ -79,3 +86,5 @@ query: jest.fn(function () {

var cb = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : function () {};
return cb(Object.assign({}, props, { id: id }));
return cb(Object.assign({}, props, {
id: id
}));
}),

@@ -87,11 +96,19 @@ move: jest.fn(function () {

return cb(ids.map(function (id) {
return Object.assign({}, props, { id: id });
return Object.assign({}, props, {
id: id
});
}));
})
}),
onUpdated: {
addListener: jest.fn(),
removeListener: jest.fn(),
hasListener: jest.fn()
},
sendMessage: jest.fn()
};
var onMessageListeners = [];
var runtime = {
connect: jest.fn(function (_ref) {
var name = _ref.name;
var connection = {

@@ -104,3 +121,5 @@ name: name,

onMessage: {
addListener: jest.fn()
addListener: jest.fn(function (listener) {
onMessageListeners.push(listener);
})
}

@@ -111,8 +130,26 @@ };

sendMessage: jest.fn(function (message, cb) {
onMessageListeners.forEach(function (listener) {
return listener(message);
});
if (cb !== undefined) {
return cb();
}
return Promise.resolve();
}),
onMessage: {
addListener: jest.fn(function (listener) {
onMessageListeners.push(listener);
}),
removeListener: jest.fn(function (listener) {
onMessageListeners = onMessageListeners.filter(function (lstn) {
return lstn !== listener;
});
}),
hasListener: jest.fn(function (listener) {
return onMessageListeners.includes(listener);
})
},
onConnect: {
addListener: jest.fn(),

@@ -122,15 +159,26 @@ removeListener: jest.fn(),

},
onConnect: {
onInstalled: {
addListener: jest.fn(),
removeListener: jest.fn(),
hasListener: jest.fn()
}
},
getURL: jest.fn(function (path) {
return path;
})
};
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) {
return typeof obj;
} : function (obj) {
return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
};
function _typeof(obj) {
if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
_typeof = function (obj) {
return typeof obj;
};
} else {
_typeof = function (obj) {
return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
};
}
return _typeof(obj);
}
var store = {};

@@ -148,3 +196,3 @@

}, {});
} else if ((typeof key === 'undefined' ? 'undefined' : _typeof(key)) === 'object') {
} else if (_typeof(key) === 'object') {
return Object.keys(key).reduce(function (acc, curr) {

@@ -155,2 +203,3 @@ acc[curr] = store[curr] || key[curr];

}
throw new Error('Wrong key given');

@@ -163,5 +212,7 @@ }

var result = id === null ? store : resolveKey(id);
if (cb !== undefined) {
return cb(result);
}
return Promise.resolve(result);

@@ -173,2 +224,3 @@ }),

}
return Promise.resolve(0);

@@ -180,5 +232,7 @@ }),

});
if (cb !== undefined) {
return cb();
}
return Promise.resolve();

@@ -191,5 +245,7 @@ }),

});
if (cb !== undefined) {
return cb();
}
return Promise.resolve();

@@ -199,5 +255,7 @@ }),

store = {};
if (cb !== undefined) {
return cb();
}
return Promise.resolve();

@@ -209,5 +267,7 @@ })

var result = id === null ? store : resolveKey(id);
if (cb !== undefined) {
return cb(result);
}
return Promise.resolve(result);

@@ -219,2 +279,3 @@ }),

}
return Promise.resolve(0);

@@ -226,5 +287,7 @@ }),

});
if (cb !== undefined) {
return cb();
}
return Promise.resolve();

@@ -237,5 +300,7 @@ }),

});
if (cb !== undefined) {
return cb();
}
return Promise.resolve();

@@ -245,5 +310,7 @@ }),

store = {};
if (cb !== undefined) {
return cb();
}
return Promise.resolve();

@@ -255,5 +322,7 @@ })

var result = id === null ? store : resolveKey(id);
if (cb !== undefined) {
return cb(result);
}
return Promise.resolve(result);

@@ -265,2 +334,3 @@ }),

}
return Promise.resolve(0);

@@ -272,5 +342,7 @@ }),

});
if (cb !== undefined) {
return cb();
}
return Promise.resolve();

@@ -283,5 +355,7 @@ }),

});
if (cb !== undefined) {
return cb();
}
return Promise.resolve();

@@ -291,5 +365,7 @@ }),

store = {};
if (cb !== undefined) {
return cb();
}
return Promise.resolve();

@@ -309,4 +385,6 @@ })

}
return Promise.resolve();
};
var browserAction = {

@@ -330,3 +408,2 @@ setTitle: jest.fn(),

// https://developer.chrome.com/extensions/commands
var commands = {

@@ -337,2 +414,3 @@ getAll: jest.fn(function (cb) {

}
return Promise.resolve();

@@ -399,3 +477,3 @@ }),

getMessage: jest.fn(function (key) {
return 'Translated<' + key + '>';
return "Translated<".concat(key, ">");
}),

@@ -453,16 +531,13 @@ getUILanguage: jest.fn(function () {

*/
global.chrome = chrome;
global.browser = chrome;
// Firefox specific globals
global.browser = chrome; // Firefox specific globals
// if (navigator.userAgent.indexOf('Firefox') !== -1) {
// https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Content_scripts#exportFunction
global.exportFunction = jest.fn(function (func) {
return func;
});
// https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Content_scripts#cloneInto
}); // https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Content_scripts#cloneInto
global.cloneInto = jest.fn(function (obj) {
return obj;
});
// }
}); // }
{
"name": "jest-webextension-mock",
"version": "3.4.0",
"description": "Mock the components of a WebExtension",
"main": "dist/setup.js",
"module": "src/setup.js",
"author": "Bryan Clark <clarkbw@gmail.com> (https://twitter.com/clarkbw)",
"license": "ISC",
"scripts": {
"test": "jest",
"build": "rollup -c",
"prettier": "prettier --single-quote --trailing-comma es5 --write \"{config,src,__{tests,setups}__}/**/*.js\" rollup.config.js",
"eslint-check": "eslint --print-config .eslintrc.js | eslint-config-prettier-check"
},
"devDependencies": {
"babel-core": "^6.26.3",
"babel-jest": "^23.0.0",
"babel-plugin-external-helpers": "^6.22.0",
"babel-preset-env": "^1.7.0",
"eslint": "^5.3.0",
"eslint-config-prettier": "^3.0.1",
"eslint-plugin-prettier": "^2.6.2",
"jest": "^23.5.0",
"prettier": "^1.14.2",
"rollup": "^0.64.1",
"rollup-plugin-babel": "^3.0.7",
"rollup-plugin-node-resolve": "^3.3.0",
"rollup-watch": "^4.0.0"
},
"jest": {
"bail": true,
"coverageDirectory": "./coverage/",
"collectCoverage": true,
"setupFiles": [
"./__setups__/chrome.js"
]
}
"name": "jest-webextension-mock",
"version": "3.5.0",
"description": "Mock the components of a WebExtension",
"main": "dist/setup.js",
"module": "src/setup.js",
"author": "Bryan Clark <clarkbw@gmail.com> (https://twitter.com/clarkbw)",
"license": "ISC",
"scripts": {
"test": "jest",
"build": "rollup -c",
"prettier": "prettier --write \"{config,src,__{tests,setups}__}/**/*.js\" rollup.config.js",
"eslint-check": "eslint --print-config .eslintrc.js | eslint-config-prettier-check"
},
"devDependencies": {
"@babel/core": "^7.0.0",
"@babel/preset-env": "^7.0.0",
"babel-core": "^7.0.0-bridge.0",
"babel-jest": "^23.0.0",
"eslint": "^5.3.0",
"eslint-config-prettier": "^3.1.0",
"eslint-plugin-prettier": "^3.0.0",
"jest": "^23.5.0",
"prettier": "^1.14.2",
"rollup": "^0.66.0",
"rollup-plugin-babel": "^4.0.1",
"rollup-plugin-node-resolve": "^3.3.0",
"rollup-watch": "^4.0.0"
},
"jest": {
"bail": true,
"coverageDirectory": "./coverage/",
"coverageReporters": [
"json",
"lcov",
"text",
"html"
],
"collectCoverage": true,
"setupFiles": [
"./__setups__/chrome.js"
]
}
}

@@ -11,4 +11,3 @@ import resolve from 'rollup-plugin-node-resolve';

babelrc: false,
presets: [['env', { modules: false }]],
plugins: ['external-helpers'],
presets: [['@babel/preset-env', { modules: false }]],
}),

@@ -15,0 +14,0 @@ ],

@@ -0,1 +1,2 @@

let onMessageListeners = [];
export const runtime = {

@@ -10,3 +11,5 @@ connect: jest.fn(function({ name }) {

onMessage: {
addListener: jest.fn(),
addListener: jest.fn(listener => {
onMessageListeners.push(listener);
}),
},

@@ -17,2 +20,3 @@ };

sendMessage: jest.fn((message, cb) => {
onMessageListeners.forEach(listener => listener(message));
if (cb !== undefined) {

@@ -24,2 +28,11 @@ return cb();

onMessage: {
addListener: jest.fn(listener => {
onMessageListeners.push(listener);
}),
removeListener: jest.fn(listener => {
onMessageListeners = onMessageListeners.filter(lstn => lstn !== listener);
}),
hasListener: jest.fn(listener => onMessageListeners.includes(listener)),
},
onConnect: {
addListener: jest.fn(),

@@ -29,3 +42,3 @@ removeListener: jest.fn(),

},
onConnect: {
onInstalled: {
addListener: jest.fn(),

@@ -35,2 +48,5 @@ removeListener: jest.fn(),

},
getURL: jest.fn(function(path) {
return path;
}),
};

@@ -27,2 +27,8 @@ // https://developer.chrome.com/extensions/tabs

}),
remove: jest.fn((tabIds, cb) => {
if (cb !== undefined) {
return cb();
}
return Promise.resolve();
}),
duplicate: jest.fn((id = '', cb = () => {}) => cb(Object.assign({}, { id }))),

@@ -37,2 +43,8 @@ query: jest.fn((query = '', cb = () => {}) => cb([{}])),

),
onUpdated: {
addListener: jest.fn(),
removeListener: jest.fn(),
hasListener: jest.fn(),
},
sendMessage: jest.fn(),
};

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc