npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

js-memoized-selector-test

v1.0.1

Published

utility for test memoized redux selectors

Downloads

5

Readme

js-memoized-selector-test

A simple utility for test redux memoized selectors, I take the idea and the code from this post of medium.

Install

npm install js-memoized-selector-test --save-dev

Synopsis

Double check yourself

"Always make sure your memoization works and you not producing any regressions. You can use following snippet to wrap you selectors in unit tests and double check it returns the same result for the same set of arguments"

Usage

First import js-memoized-selector-test

// import memoizedSelector from 'js-memoized-selector-test';
var memoizedSelector = require('./dist/index.js').default;
// omit this part is for run this test
var test = require('tape');

Then if you have the follow state:

var state = {
  todos: [
    { name: 'task 1', completed: true },
    { name: 'task 2', completed: false }
  ],
  project: 'home'
};

Then maybe you can have the follow selectors:

function badGetCompletedTodos(state) {
  return state.todos.filter(t => t.completed);
};

function badGetProject(state) {
  return { project: state.project };
}

this selectors are bad defined because always returns a diferent instance of the results.

Whit memoizedSelector we apply a double check in our unit test for avoid this:

test('Bad selectors', function(t) {
  t.plan(2);
  t.throws(function() {
    var target = memoizedSelector(badCompletedTodosSelector);
    target(state);
  }, 'Memoization check failed');
  t.throws(function() {
    var target = memoizedSelector(badGetProject);
    target(state);
  }, 'Memoization check failed');
});

Here we have a good implementation of selectors, we can use reselect for this porpuse.

var createSelector = require('reselect').createSelector;

First we can rewrite our selectors:

var getTodos = function(state) {
  return state.todos;
};

var getCompletedTodos = createSelector(
  [getTodos],
  function(todos) {
    return todos.filter(t => t.completed);
  }
);

function getProject(state) {
  return state.project;
};

Then we can apply the double check in our unit test

test('Completed todos selector', function(t) {
  t.plan(1);
  var completedTodosSelector = memoizedSelector(getCompletedTodos);
  var completedTodos = completedTodosSelector(state);
  t.deepEqual(completedTodos, [state.todos[0]]);
});
test('Project selector', function(t) {
  t.plan(1);
  var projectSelector = memoizedSelector(getProject);
  var project = projectSelector(state);
  t.equal(project, state.project);
});

Memoized selector is only for apply a double check for our selectors in our unit test, then you can install like a dev dependency.

Licence

MIT