小编myt*_*eal的帖子

从GitHub贡献活动中排除package-lock.json

现在npm v5.0.0已经用完,使用npm包自动生成一个package-lock.jsonon npm install.就我而言,我的package-lock.json文件恰好接近10,000行代码.

包lock.json

Npm还建议提交此文件:

npm notice创建了一个lockfile作为package-lock.json.你应该提交这个文件.

我不希望此文件包含在GitHub上的贡献活动的行数中.

我已经尝试将文件设置为出售代码.gitattributes,但这只会影响存储库语言.

有没有办法从贡献活动中排除文件而不将其添加到.gitignore

javascript github node.js npm

20
推荐指数
1
解决办法
5585
查看次数

使用Mocha设置JSDOM

我正在尝试使用sinon的mock和spy来测试Redux组件和异步操作,但是只要我将sinon导入任何测试文件,运行以下npm脚本:

mocha --require test/helpers/browser.js --compilers.:babel-core/register --opts test/client/**/*.{js,jsx} --recursive test/client

我收到以下错误:

var div = typeof document !== "undefined" && document.createElement("div");
                                                      ^
Run Code Online (Sandbox Code Playgroud)

TypeError:document.createElement不是.../node_modules/sinon/lib/sinon/util/core/deep-equal.js中的函数:3:55

browser.js是我设置JSDOM的地方:

import { JSDOM } from 'jsdom';

const doc = new JSDOM('<!DOCTYPE html><html><head></head><body></body></html>');
cost win = doc.defaultView; // tried doc.window;

global.document = doc;
global.window = win;

/*
Object.keys(win).forEach(property => {
  if (typeof global[property] === 'undefined') {
    global[property] = win[property];
  }
});
*/

global.navigator = {
  userAgent: 'node.js'
};
Run Code Online (Sandbox Code Playgroud)

我想我没有正确设置jsdom?我试着环顾四周,在上面的browser.js文件中找到了注释代码,但是在取消注释时会产生错误:

Object.keys(win).forEach(function (property) {
       ^
Run Code Online (Sandbox Code Playgroud)

TypeError:无法将undefined或null转换为object.

javascript mocha.js node.js jsdom redux

8
推荐指数
1
解决办法
6541
查看次数

为单元测试服务工作者设置 JSDOM navigator.serviceWorker

我正在寻找一种方法来设置 navigator.serviceWorker 来对我的 service worker 进行单元测试。我当前的 JSDOM 设置如下所示:

import { JSDOM } from 'jsdom';

const dom = new JSDOM('<!DOCTYPE html><html><head></head><body></body></html>');

global.window = dom.window;
global.document = dom.window.document;

Object.keys(global.window).forEach(property => {
  if (typeof global[property] === 'undefined') {
    global[property] = global.window[property];
  }
});

global.navigator = {
  userAgent: 'node.js'
};
Run Code Online (Sandbox Code Playgroud)

我已经尝试注释掉global.navigator = ...global.navigator = global.window.navigator。然而,下面console.log(global.navigator.serviceWorker)console.log(navigator.serviceWorker)两回undefined在我的单元测试:

describe('Service Worker', () => {
  it('should register a service worker and cache files on install', () => {
    console.log(navigator.serviceWorker); …
Run Code Online (Sandbox Code Playgroud)

javascript unit-testing mocha.js jsdom service-worker

2
推荐指数
1
解决办法
1591
查看次数

在类中实现异步索引数据库的简洁方法

我有一个加载indexedDB 的类。在类中的方法可以访问它之前,我需要预先加载indexedDB。目前,我使用的init()方法先于任何其他未this.db初始化的方法。

我正在寻找一种更干净的方法来实现我所拥有的,这绝对不是干的。基本上每个方法目前都是使用下面相同的代码模式实现的。

问题点是:

  1. 需要另一种方法init()才能正确处理indexedDB的初始化。
  2. 这个if (!this.db) {片段稍后会重复出现。

export default class Persist {
  constructor(storage) {
    if (storage) {
      this.storage = storage;
    }
    else {
      throw new Error('A storage object must be passed to new Persist()');
    }
  }

  // needed to ensure that indexedDB is initialized before other methods can access it.
  init () {
    // initialize indexedDB:
    const DBOpenRequest = this.storage.open('db', 1);

    DBOpenRequest.onupgradeneeded = () => {
      const db = DBOpenRequest.result;
      db.createObjectStore('db', …
Run Code Online (Sandbox Code Playgroud)

javascript indexeddb

1
推荐指数
1
解决办法
1362
查看次数