标签: proxyquire

`proxyquire` - 错误:找不到模块

由于某种原因proxquire找不到我的模块index.js。我一定是在做一些非常愚蠢或明显的事情而无法看到它。

错误:

  invoicer
    good request
      1) "before all" hook


  0 passing (9ms)
  1 failing

  1) invoicer good request "before all" hook:
     Error: Cannot find module '../index.js'
      at Function.Module._resolveFilename (module.js:338:15)
      at Proxyquire._disableModuleCache (/Users/mario/projects/_invoice/print-invoice/node_modules/proxyquire/lib/proxyquire.js:218:19)
      at Proxyquire._disableCache (/Users/mario/projects/_invoice/print-invoice/node_modules/proxyquire/lib/proxyquire.js:203:15)
      at Proxyquire._withoutCache (/Users/mario/projects/_invoice/print-invoice/node_modules/proxyquire/lib/proxyquire.js:173:27)
      at Proxyquire.load (/Users/mario/projects/_invoice/print-invoice/node_modules/proxyquire/lib/proxyquire.js:135:15)
      at getTestedModule (/Users/mario/projects/_invoice/print-invoice/test/test.js:89:12)
      at Context.<anonymous> (/Users/mario/projects/_invoice/print-invoice/test/test.js:69:28)
      at Hook.Runnable.run (/usr/local/lib/node_modules/mocha/lib/runnable.js:218:15)
      at next (/usr/local/lib/node_modules/mocha/lib/runner.js:259:10)
      at Object._onImmediate (/usr/local/lib/node_modules/mocha/lib/runner.js:276:5)
      at processImmediate [as _immediateCallback] (timers.js:345:15)
Run Code Online (Sandbox Code Playgroud)

奇怪的是,我对另一个应用程序的测试进行了相同的设置,并且在那里找到模块没有问题。我什至维护了相同版本的proxyquire,将其更改为最新版本仍然没有修复它。index.js存在于指定路径的目录中。

这是我的测试代码:

var chai = require('chai');
var sinonChai = require("sinon-chai");
var …
Run Code Online (Sandbox Code Playgroud)

unit-testing node.js proxyquire

6
推荐指数
0
解决办法
1539
查看次数

Proxyquire不会截断我所需的课程

我有一个课AProvider要求'./b.provider'.

const BProvider = require('./b.provider');

class AProvider {
  static get defaultPath() {
    return `defaults/a/${BProvider.getThing()}`;
  }
}

module.exports = AProvider;
Run Code Online (Sandbox Code Playgroud)

b.provider.js毗邻a.provider.js并且看起来像

global.stuff.whatever = require('../models').get('Whatever'); // I didn't write this!

class BProvider {
  static getThing() {
    return 'some-computed-thing';
  }
}
module.exports = BProvider;
Run Code Online (Sandbox Code Playgroud)

在我的测试中,我使用如下proxyquire模拟./b.provider:

import { expect } from 'chai';
import proxyquire from 'proxyquire';

describe('A Provider', () => {
  const Provider = proxyquire('../src/a.provider', {
    './b.provider': {
      getThing: () => 'b-thing'
    }, …
Run Code Online (Sandbox Code Playgroud)

javascript unit-testing proxyquire es6-class

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

Proxyquire 显示错误“找不到模块”

我正在尝试使用proxyquire替换私有函数,以便在我的 Meteor 应用程序中进行测试。

流星1.6.1

流星测试:mocha@1.1.2

在我的parentFunction.js中:

import { some function } from 'anotherFile';

function childFunction() {
  ...
  return someValue;
}

export default function parentFunction() {
  return childFunction()
}
Run Code Online (Sandbox Code Playgroud)

在我的测试文件中:

const proxyquire = require('proxyquire');

if (Meteor.isServer) {
  ...

  describe('parentFunction', () => {
    it('uses the mocked child function', () => {
      const testThing = proxyquire('./parentFunction', {
        'childFunction': () => ({ 'name': 'bob' }),
      });
  });
}
Run Code Online (Sandbox Code Playgroud)

ParentFunction.js 与我的测试文件位于同一文件夹中,为了仔细检查路径,我确保它有效:

import parentFunction from './parentFunction';
Run Code Online (Sandbox Code Playgroud)

但是当我运行测试时,我看到一个错误:

Error: Cannot find module './parentFunction.js'
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?我试过绝对路径,没用。据我从文档中看到,需要 proxiquire …

javascript testing mocha.js meteor proxyquire

6
推荐指数
0
解决办法
623
查看次数

在Node.js中模拟嵌套模块?

我有这些文件:

File1.js

var mod1 = require('mod1');
mod1.someFunction()
...
Run Code Online (Sandbox Code Playgroud)

File2.js

var File1 = require('./File1');
Run Code Online (Sandbox Code Playgroud)

现在在为File2编写单元测试时,是否可以进行mod1模拟,以便我不进行调用mod1.someFunction()

javascript unit-testing require node.js proxyquire

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

Proxyquire 调用原始文件而不是存根

您好,我正在尝试使用 proxyquire 模拟控制器内的模型。但由于某种原因,当尝试注入模拟时,原始文件被调用。

这就是控制器内部需要我的模型的方式:

var Product = require('./product.model');
Run Code Online (Sandbox Code Playgroud)

这就是我尝试存根模型的方式

  var proxyquire = require('proxyquire').noCallThru().noPreserveCache();
  var productsStub = {findAsync: sinon.stub()};
  productsStub.findAsync.resolves(mockProducts);
  var mockProducts = [{_id:'0001',title: 'title', price: 123, description: 'le description'}];
  var productController = proxyquire('./product.controller',{'./product.model':productsStub});
Run Code Online (Sandbox Code Playgroud)

但是当我运行测试时我收到此错误

Running "mochaTest:unit" (mochaTest) task
>> Mocha exploded!
>> OverwriteModelError: Cannot overwrite `Product` model once compiled.
>>     at Mongoose.model (/Users/victor/Documents/projects/estudo/mean/meanshop/node_modules/mongoose/lib/index.js:360:13)
>>     at Object.<anonymous> (/Users/victor/Documents/projects/estudo/mean/meanshop/server/api/product/product.model.js:15:27)
>>     at Module._compile (module.js:409:26)
>>     at normalLoader (/Users/victor/Documents/projects/estudo/mean/meanshop/node_modules/babel-core/lib/api/register/node.js:199:5)
>>     at Object.require.extensions.(anonymous function) [as .js] (/Users/victor/Documents/projects/estudo/mean/meanshop/node_modules/babel-core/lib/api/register/node.js:216:7)
>>     at Module.load (module.js:343:32)
>>     at Function.Module._load (module.js:300:12) …
Run Code Online (Sandbox Code Playgroud)

mocha.js node.js proxyquire

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

Typescript/Node.js - 如何模拟传递依赖关系进行集成测试?

假设我有一条由控制器处理的Express路线.控制器使用服务,服务使用存储库与数据源通信.

我想使用Supertest创建一个集成测试来测试该路由:

test -> my Express app -> controller -> service -> repository -> data source
Run Code Online (Sandbox Code Playgroud)

我的问题是我需要模拟存储库/数据源,来运行测试!我想硬编码一些值,好像它们来自真实的数据源.我有什么选择?

在Java世界中,我将使用Spring或Guice的依赖注入,我会用这样的模拟版本替换存储库.在Typescript/Node.js世界中实现这种模拟的模式是什么?

我想使用普通的Javascript我可以使用Proxyquire它的全局覆盖需要功能,从测试本身模拟存储库.但我不确定这适用于Typescript.

那么使用Typescript和Node.js从测试文件中模拟"深层"组件(传递依赖)的推荐方法是什么?

node.js typescript supertest proxyquire

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

与proxyquire一起订货

如何使用proxyquire和sinon存储以下模块:

var email = require("emailjs").server.connect.send();
Run Code Online (Sandbox Code Playgroud)

我做了以下,但它不起作用,因为当我尝试在其中触发错误send()时仍然发送电子邮件.

sendMailStub = sinon.stub(email, "send");    
testedModule = proxyquire('../index.js', {
                'email': {
                    'server': {
                        'send': sendMailStub
                        }
                    }
            });
Run Code Online (Sandbox Code Playgroud)

并尝试过:

testedModule = proxyquire('../index.js', {
            email: {send: sendMailStub}
        });
Run Code Online (Sandbox Code Playgroud)

到目前为止,这是完整的测试,但失败了:

var chai = require('chai');
var sinonChai = require("sinon-chai");
var sinon = require('sinon');
chai.use(sinonChai);
var proxyquire = require('proxyquire');
var testedModule;
var expect = chai.expect;



describe('invoicer', function () {

    var nock = require('nock');

    var ResponseOptions = {
        username: "Peter Pan",
        user_address_line_1: "Never Never Land",
        user_address_line_2: "Tree-house 99", …
Run Code Online (Sandbox Code Playgroud)

unit-testing node.js proxyquire

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

使用proxyquire和mocha在单元测试中模拟方法调用时如何模拟时间延迟(超时)?

在测试模块 A 中的方法时,我使用 proxyquire 模拟模块 B 的方法(在模块 A 中注入了 require())。模拟(mocking ad.model.js 模块的 get_campaigns 方法):

const admitadModelMock = {
    '../services/admitad.model': {
        get_campaigns: (limit, page) => new Promise((resolve, reject) =>
            setTimeout(resolve({campaigns: testData, count: 1000}), 5000)
        ),
    },
};
Run Code Online (Sandbox Code Playgroud)

考试:

it('shold get all campaigns from Admitad', async function () {
    this.timeout(60000);
    let err, data;
    // mock dependencie (get_campaigns() of module B will be mocked):
    let $serviceStubbed = proxyquire('../services/campaign-sync', admitadModelMock);
    // getAdmitadCampaigns() just calls get_campaigns method of module B
    [err, data] = await to($serviceStubbed.getAdmitadCampaigns(50)); …
Run Code Online (Sandbox Code Playgroud)

mocha.js node.js proxyquire

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

代理不顽固

我试图让Proxyquire使用简单的方法替换,但我无法弄清楚我做错了什么.

我创建了lib.js.

module.exports = {
    thing: () => {
        console.log("thing");
    }
};
Run Code Online (Sandbox Code Playgroud)

和test.js

const lib = require("./lib");

module.exports = () => {
    lib.thing();
};
Run Code Online (Sandbox Code Playgroud)

并试图将依赖关系和替换东西与另一个函数,即

const proxyquire = require("proxyquire");
const libStub = {};
const test = proxyquire("./test", {"lib": libStub});

test();

libStub.thing = () => {
    console.log("replaced");
};

test();
Run Code Online (Sandbox Code Playgroud)

但是测试在两次调用时都会记录"事物"而不是"替换".任何帮助表示赞赏.

javascript proxyquire

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

不能使用 sinon 和 proxyquire 模拟构造函数

我看过几个类似的问题,但没有一个案例适合我的问题。我正在尝试模拟我在其他测试中完成的构造函数,但是在使用 google-auth-library 的情况下我无法让它工作

代码.js

const {OAuth2Client} = require('google-auth-library');
const keys = require('./oauth2.keys.json');

async function getRedirectUrl() {
  const oAuth2Client = new OAuth2Client(
    keys.installed.client_id,
    keys.installed.client_secret,
    keys.installed.redirect_uris[0]
  );

  const authorizeUrl = oAuth2Client.generateAuthUrl({
    access_type: 'offline',
    scope: 'https://www.googleapis.com/auth/bigquery',
    prompt: 'consent'
  });

  return authorizeUrl;
}
Run Code Online (Sandbox Code Playgroud)

测试.js

let Code = require('../code.js');

describe('code', function() {
    let generateUrlStub, tokenStub, mockClient;

    before(async () => {
      generateUrlStub = sinon.stub().returns('http://example.com');
      tokenStub = sinon.stub().returns({tokens: 'tokens'});

      mockClient = sinon.stub().returns({
        generateAuthUrl: generateUrlStub,
        getToken: tokenStub,
      });

      Code = proxyquire('../Code.js', {
        'google-auth-library': mockClient,
      });
    });

    it('should call …
Run Code Online (Sandbox Code Playgroud)

testing node.js sinon proxyquire

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

如何在 NodeJS 中模拟嵌套依赖关系

我有一个模块a

const b = require(./b);

function aGetResult() {
  return b.getInfo();
}
Run Code Online (Sandbox Code Playgroud)

模块B

const c = require(./c);
    
function getInfo() {
  return getDetailInfo();
}

function getDetailInfo() {
    const result = c.getApiResult();
    return result
}
Run Code Online (Sandbox Code Playgroud)

模块C

function getApiResult() {
  return api.get(/test/1);
}
Run Code Online (Sandbox Code Playgroud)

我已经为模块 A 编写了一个测试,但遇到了存根依赖项的问题。我只想存根c.getApiResult()而不是b.getInfo()or b.getDetailInfo()。我尝试过有选择地使用存根proxyquire,但遇到了问题。有什么帮助吗?

testing unit-testing node.js sinon proxyquire

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

使用sinon和proxyquire定位嵌套方法

对于下面的代码片段nodejs,我将如何send使用proxyquire和存根该方法sinon,因为它属于文件index.js?我尝试了很多方法,但经常出错.

var emailjs = require("emailjs");
emailjs.server.connect({
                    user: obj.user,
                    password: obj.password,
                    host: obj.host,
                    port: obj.port,
                    tls: obj.tls,
                    ssl: obj.ssl
                })
                    .send(mailOptions, function(error, message){
                    if (error) {
                        console.log("ERROR");
                        context.done(new Error("There was an error sending the email: %s", error));
                        return;
                    } else {
                        console.log("SENT");
                        context.done();
                        return;
                    }
                });
Run Code Online (Sandbox Code Playgroud)

到目前为止,在我的测试中,我有以下设置,但得到Uncaught TypeError: Property 'connect' of object #<Object> is not a function.

readFileStub = sinon.stub();
sendStub = sinon.stub();
connectStub = sinon.stub().returns(sendStub);

testedModule = proxyquire('../index', …
Run Code Online (Sandbox Code Playgroud)

node.js sinon proxyquire

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

Proxyquire:无法存根 fs.readFileSync

我似乎无法从 NodeJS 核心在 fs 上存根 readFileSync。以下代码隔离了该问题。通过 Mocha 运行测试结果如下:

> mocha tests/test.js

      Some description
        1) "before all" hook


      0 passing (15ms)
      1 failing

      1) Some description "before all" hook:
         TypeError: Cannot read property 'charCodeAt' of undefined
          at Object.stripBOM (internal/module.js:48:14)
          at Object.require.extensions.(anonymous function) (node_modules/proxyquire/lib/proxyquire.js:276:43)
          at Proxyquire._withoutCache (node_modules/proxyquire/lib/proxyquire.js:179:12)
          at Proxyquire.load (node_modules/proxyquire/lib/proxyquire.js:136:15)
          at Context.<anonymous> (tests/test.js:12:15)
Run Code Online (Sandbox Code Playgroud)

这是测试/test.js

var proxyquire = require('proxyquire'),
    sinon = require('sinon'),
    fs = require('fs'),
    sut;

describe('Some description', function () {
    var readFileSyncStub;

    before(function () {
        readFileSyncStub = sinon.stub(fs, 'readFileSync');
        readFileSyncStub.withArgs('someFile.js', { encoding: …
Run Code Online (Sandbox Code Playgroud)

unit-testing node.js sinon proxyquire

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