标签: sinon

Sinon Stub.returns() 未返回正确的值

根据文档,Sinon stub.returns() 方法不会返回正确的响应。有什么想法吗?

stubThis = sinon.stub().returns('123');

console.log(stubThis); // returns stub, but expect it to return 123
Run Code Online (Sandbox Code Playgroud)

sinon

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

mocha、sinon 和存根窗口对象

我有一个 ES6 模块,我正在尝试为其编写测试,用于前端 React/Redux 应用程序。

这是在我的测试中困扰我的模块部分:

import 'aws-sdk/dist/aws-sdk';
import Bluebird from 'bluebird';

const AWS = window.AWS;
Run Code Online (Sandbox Code Playgroud)

这是我的测试的开始:

import chai from 'chai';
import { expect } from 'chai';
import chaiAsPromised from 'chai-as-promised';
import sinon from 'sinon';

chai.use(chaiAsPromised);

describe("S3Gateway", () => {
  let awsStub;
  let sandbox;
  let writeObject;

  beforeEach(() => {
    sandbox = sinon.sandbox.create();
    writeObject = require('../../../app/lib/aws/s3gateway').writeObject;

    awsStub = sinon.stub().returns({
      S3: sinon.stub().returns({
        putObject: sinon.spy()
      })
    });
    sandbox.stub(window, 'AWS', awsStub);
  });
Run Code Online (Sandbox Code Playgroud)

我在终端窗口中运行 mocha 时不断出现在标准输出中的错误是:

$ mocha test/lib/aws/s3gateway.js --compilers js:babel-core/register


  S3Gateway
    1) "before each" …
Run Code Online (Sandbox Code Playgroud)

mocha.js sinon webpack aws-sdk

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

测试反应组件 - TypeError: data.map is not a function

我有一个反应组件,它接受一组对象并将它们映射到视图中的另一个反应组件中。我在测试它时运气不好,因为它给出了这个错误:

类型错误:data.map 不是函数

这是我写的测试。请注意我传递了 data 属性,我认为这应该使它起作用?

内容.test.js

import React from 'react';
import { shallow, mount } from 'enzyme';
import { expect } from 'chai';

import Content from '../components/Content.jsx';

describe('<Content />', () => {
  const data = {
    created: '2017-02-21T09:50:21.441815Z',
    duration: 1575,
    final_script: 'some script',
    language: 'en-GB',
    rating: 2,
    url: 'some url',
  };
  it('renders without exploding', () => {
    mount(<Content data={ data } />);
  });
});
Run Code Online (Sandbox Code Playgroud)

这是组件本身

内容.jsx

function Content(props) {
  const { data } = props;
  return (
    <div className='content_container'> …
Run Code Online (Sandbox Code Playgroud)

sinon chai reactjs jestjs enzyme

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

我可以使用 sinon 监视外部模块函数中的函数调用吗?

我有一个模块:

let xmlParser = require('./myTools').xmlParser;

function extractDataAndWrite(xmldata) {
    let doc = xmlParser(xmldata);
    ...
}

module.exports = {
    extractDataAndWrite,
};
Run Code Online (Sandbox Code Playgroud)

xmlParser现在我想测试in的调用extractDataAndWrite

var extractDataAndWrite = require('../services/importData.js').extractDataAndWrite;
var mytools = require('./myTools');

var sinon = require('sinon');

describe('Test extractDataAndWrite', function() {
    it('call xmlParser', function(done) {
        var xmlParserSpy = sinon.spy(mytools, 'xmlParser');

        extractDataAndWrite("someXML");

        console.log('xmlParserSpy: ' + xmlParserSpy.callCount);
        done();
    });
});
Run Code Online (Sandbox Code Playgroud)

我期望得到xmlParserSpy.callCount == 1但它是0!我的间谍无法工作,我必须改变什么?

node.js sinon

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

如何在JS中测试工厂方法?

背景

我在 JS 中有一个工厂方法,可以为我的 node.js 应用程序创建一个对象。这个工厂方法接收一些参数,我想测试我是否正确创建了对象。

代码

const LibX = require("libX");

const obj = deps => {

    const { colorLib } = deps;

    const hello = () => {
        console.log(colorLib.sayHello()); // prints a phrase with cool colors
    };

    return {
        hello
    };
};

//Here I return `obj` with all dependencies included. Ready to use!
const objFactory = ({animal, owner = "max"}) => {

    //For example,I need to know if phrase is being well constructed
    const phrase = `${owner} from ${animal} …
Run Code Online (Sandbox Code Playgroud)

javascript unit-testing mocha.js node.js sinon

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

在 Express 中测试中间件而不创建重新创建服务器的简单方法?

我希望能够在每次测试的基础上存根我的中间件功能。正如此处阐明的,问题是我不能仅仅存根我的中间件函数,因为节点已经缓存了中间件函数,所以我不能存根它,因为我在一开始创建了我的应用程序。

const request = require("supertest");
const { expect } = require("chai");
const sinon = require('sinon');
const auth = require ("../utils/auth-middleware")
const adminStub = sinon.stub(auth, "isAdmin").callsFake((req, res, next) => next());
const app = require("../app.js"); // As soon as I create this, the middleware isAdmin function becomes cached and no longer mutable
Run Code Online (Sandbox Code Playgroud)

以上作为链接的SO答案中描述的解决方案,但我不喜欢那样为了恢复存根或修改假,我必须完全重新创建服务器。

我想知道是否有更好、更优雅的方法来解决 Node 首先缓存这些函数的事实require。我正在研究可能使用proxyquireordecache但两者似乎都提供了解决方法而不是可持续的解决方案(尽管我很可能在这里错了)。

javascript mocha.js node.js sinon

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

如何模拟在函数内部实例化的类 - Sinon?

假设我有一个像follow这样的功能。

import NetworkService from './services';

async function sendAPIRequest(data: any){
  // validations
  const service = new NetworkService();
  await service.call(data)
}
Run Code Online (Sandbox Code Playgroud)

我的测试看起来像这样,它使用了 mocha、chai、sinon。

describe('sendAPIRequest', function(){
   it('make api', async function(){

       // trying to mock Network service like below
       const serviceMock = sinon.createStubInstance(NetworkService);
       await sendAPIRequest({name: 'foobar'})
   });
});
Run Code Online (Sandbox Code Playgroud)

但我收到了类似的错误

错误:预期在对象上存根方法,但没有找到

NetworkService.测试时如何模拟我的sendAPIRequest.

unit-testing mocking express sinon typescript

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

如何模拟使用 axios 发出网络请求的异步函数?

我想对下面的函数进行单元测试,该函数在我的 node.js 服务器中使用 axios 调用端点。

const callValidateCookieApi = async (cookie) => {
  try {
    const config = {
      method: 'post',
      url: process.env.API_COOKIE_VALIDATION,
      headers: {
        Cookie: cookie
      }
    }
    return await axios(config)
  } catch (error) {
    console.log(error.message)
    return error
  }
}
Run Code Online (Sandbox Code Playgroud)

如何通过模拟函数内部的 axios 调用来编写单元测试用例?

unit-testing mocha.js node.js sinon chai

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

使用 Sinon 来模拟服务模块

我已经进入了单元测试阶段,说实话,网上所有不同的例子让我感到困惑。我对Mocha & Chai很了解,但Sinon却是另一回事。

所以我有一个我认为非常简单的设置。我有一个调用控制器的 POST 路由。这个控制器就像这样(删除了一些基本的验证代码)

const { createUser } = require('../services/user.service');

const apiResponse = require('../helpers/apiResponse');

const postUser = async (req, res) => {
    const user = {
      account_id: req.body.id,
      status: req.body.status,
      created_at: new Date(),
      updated_at: new Date(),
    };

    const result = await createUser(user);
    return apiResponse.successResponseWithData(res, 'User added.', result.affectedRows);
  } catch (err) {
    return apiResponse.errorResponse(res, err);
  }
};

module.exports = {
  postUser,
};
Run Code Online (Sandbox Code Playgroud)

所以它真正做的就是验证,然后使用 req 创建一个用户对象并将其传递给服务类。该服务类只是将数据传递给数据库类。

const { addUserToDb } = require('../database/user.db');

const createUser = async (user) => {
  try …
Run Code Online (Sandbox Code Playgroud)

unit-testing node.js sinon sinon-chai

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

测试构造函数使用Sinon调用方法

我想确保构造函数在用Sinon实例化时正在调用一个方法,但是,我似乎无法使它正常工作,因为我相信sinon不会监视正确的实例化:

class Test {
  constructor() {
    this.someFunction();
  }

  someFunction() {
    return 1;
  }
}
Run Code Online (Sandbox Code Playgroud)

...和测试

describe('constructor', () => {

  it('should call someFunction()', () => {
    const spyFunc = new Spy(new Test(), 'someFunction');
    expect(spyFunc.calledOnce).to.be.true;
  });

});
Run Code Online (Sandbox Code Playgroud)

javascript unit-testing mocha.js sinon

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