jest-webextension-mock
Advanced tools
Comparing version 3.4.0 to 3.5.0
@@ -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); | ||
}); | ||
}); | ||
}); |
'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
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
267054
34
1579