Categories
JavaScript Answers

How to test Chrome extensions with JavaScript?

Sometimes, we want to test Chrome extensions with JavaScript.

In this article, we’ll look at how to test Chrome extensions with JavaScript.

How to test Chrome extensions with JavaScript?

To test Chrome extensions with JavaScript, we can use sinon-chrome.

For instance, we write

const vm = require("vm");
const fs = require("fs");
const chrome = require("sinon-chrome");

chrome.tabs.query.yields([
  { id: 1, title: "Tab 1" },
  { id: 2, title: "Tab 2" },
]);

const context = {
  chrome,
};

const code = fs.readFileSync("src/background.js");
vm.runInNewContext(code, context);

sinon.assert.calledOnce(chrome.browserAction.setBadgeText);
sinon.assert.calledWithMatch(chrome.browserAction.setBadgeText, {
  text: "2",
});

to mock the open tabs with

chrome.tabs.query.yields([
  { id: 1, title: "Tab 1" },
  { id: 2, title: "Tab 2" },
]);

Then we inject the mocked chrome.* API into the environment with

const context = {
  chrome,
};

And then we run the extension with

const code = fs.readFileSync("src/background.js");
vm.runInNewContext(code, context);

Finally, we do the assertions with

sinon.assert.calledOnce(chrome.browserAction.setBadgeText);
sinon.assert.calledWithMatch(chrome.browserAction.setBadgeText, {
  text: "2",
});

Conclusion

To test Chrome extensions with JavaScript, we can use sinon-chrome.

Categories
JavaScript Answers

How to get the caret column (not pixels) position in a textarea, in characters, from the start with JavaScript?

Sometimes, we want to get the caret column (not pixels) position in a textarea, in characters, from the start with JavaScript.

In this articl;e, we’ll look at how to get the caret column (not pixels) position in a textarea, in characters, from the start with JavaScript.

How to get the caret column (not pixels) position in a textarea, in characters, from the start with JavaScript?

To get the caret column (not pixels) position in a textarea, in characters, from the start with JavaScript, we can use the text area’s selectionStart and selectionEnd properties.

For instance, we write

textarea.value.substring(textarea.selectionStart, textarea.selectionEnd)

to call textarea.value.substring with textarea.selectionStart and textarea.selectionEnd to get the highlighted string in the text area.

Conclusion

To get the caret column (not pixels) position in a textarea, in characters, from the start with JavaScript, we can use the text area’s selectionStart and selectionEnd properties.

Categories
JavaScript Answers

How to prevent sticky hover effects for buttons on touch devices with CSS?

Sometimes, we want to prevent sticky hover effects for buttons on touch devices with CSS.

In this article, we’ll look at how to prevent sticky hover effects for buttons on touch devices with CSS.

How to prevent sticky hover effects for buttons on touch devices with CSS?

To prevent sticky hover effects for buttons on touch devices with CSS, we can use the hover media query.

For instance, we write

@media (hover: hover) {
  button:hover {
    background-color: blue;
  }
}

to apply styles for the hover media query.

We set buttons’ background color to blue if we’re hovering on a touch screen by using the media query.

Conclusion

To prevent sticky hover effects for buttons on touch devices with CSS, we can use the hover media query.

Categories
JavaScript Answers

How to use the includes method in lodash to check if an object is in the collection with JavaScript?

Sometimes, we want to use the includes method in lodash to check if an object is in the collection with JavaScript.

In this article, we’ll look at how to use the includes method in lodash to check if an object is in the collection with JavaScript.

How to use the includes method in lodash to check if an object is in the collection with JavaScript?

To use the includes method in lodash to check if an object is in the collection with JavaScript, we can use the some function.

For instance, we write

const hasB = _.some([{ a: 1 }, { b: 2 }], { b: 2 });

to call some with the array [{ a: 1 }, { b: 2 }] that we want to check if { b: 2 } is in the array.

it should return true since { b: 2 } is in the array.

Conclusion

To use the includes method in lodash to check if an object is in the collection with JavaScript, we can use the some function.

Categories
JavaScript Answers

How to fix await is a reserved word error inside async function in JavaScript?

Sometimes, we want to fix await is a reserved word error inside async function in JavaScript.

In this article, we’ll look at how to fix await is a reserved word error inside async function in JavaScript.

How to fix await is a reserved word error inside async function in JavaScript?

To fix await is a reserved word error inside async function in JavaScript, we can use await before the function that returns a promise.

For instance, we write

const sendVerificationEmail = () => async (dispatch) => {
  await Auth.sendEmailVerification();
  // ..
};

to call Auth.sendEmailVerification which returns a promise.

We use await to wait for the returned promise to finish before we run the rest of the code in the sendVerificationEmail function.

Conclusion

To fix await is a reserved word error inside async function in JavaScript, we can use await before the function that returns a promise.