标签: sinon

如何根据参数调用 sinon Stub YieldsTo 函数

我正在使用 sinonjs 来测试我的 ajax 应用程序。

sinon.stub($, 'ajax').yieldsTo('success',
{
    msgtype: 'success',
    state: 'loggedin'
});
Run Code Online (Sandbox Code Playgroud)

我的问题是:基于 AJAX 中的 URL,我想以不同的方式发送参数。我怎样才能做到这一点?

如果 $.ajax 的 url 是:/login那么 'success' 的参数应该是 {state: 'loggedin'}

如果 $.ajax 的 url 是:/getemail那么 'success' 的参数应该是 {email: 'test@test.com'}

- - - - - - 编辑 - - - - - - -

我的ajax参数是{url: '/login', type: "POST", data: request_data, success: function(data){}}

ajaxStub.withArgs({url:'/login'})不管用。

javascript unit-testing sinon

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

使用 Sinon 和 Mocha 的存根实例方法

我已经为下面的函数编写了测试用例(我省略了很多不必要的代码,只提供了必要的东西,但如果你需要任何其他信息,请告诉我)。

static getLibs() {
  return new Promise((resolve, reject) => {
    const instance = new LibClass();
    instance.loadLibs().then((libs) => {
      if (!libs) {
        return LibUtils.createLib();
      } else {
        return Promise.resolve([]);
      }
    }).then(resolve).catch((err) => {
      //log stuff here
    })
  })
}

export default class LibClass {
  //constructor
  //method
  createLib() {
    return new Promise(() => {
      //some stuff
    })
  }
}
Run Code Online (Sandbox Code Playgroud)

describe('Library', () => {
  it('should get libs', () => {
    let obj = new LibClass();
    let mstub = sinon.stub(obj, 'loadLibs').returns(Promise.resolve('success'));

    return LibWrapper.getLibs().then((res) => …
Run Code Online (Sandbox Code Playgroud)

unit-testing mocha.js node.js sinon chai

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

跟踪使用 Sinon/Mocha 调用方法的次数

我正在使用 Mocha/Sinon 编写一个测试,以确保async tryAtMost我创建的函数正在调用 Promise 并且只重试该承诺X次数。

我的tryAtMost功能看起来像:

  async tryAtMost(options, promise, maxRetries, retryInterval = 0) {
    return new Promise(async (resolve, reject) => {
      try {
        const res = await promise(options);
        if (res.statusCode == 200) {
          return resolve(res);
        } else {
          if (maxRetries > 0) {
            setTimeout(async () => {
              return await this.tryAtMost(options, promise, maxRetries - 1, retryInterval);
            }, retryInterval);
          } else {
            return reject('Ran out of retries, failing.');
          }
        }
      } catch (err) {
        return …
Run Code Online (Sandbox Code Playgroud)

mocha.js node.js promise async-await sinon

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

使用Sinon 对单个导出函数进行存根

我刚刚将 lodash 导入从 更改为import _ from 'lodash';import debounce from 'lodash/debounce';
我的测试中我曾经有sandbox.stub(_, 'debounce').returnsArg(0);,但现在我不知道将其更改为什么。显然sandbox.stub(debounce).returnsArg(0);行不通。不知道当仅从模块导出单个函数时该怎么做。

javascript testing sinon

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

类型错误:存根预计会产生,但没有传递回调从单元测试返回

我正在尝试编写一个单元测试,它应该在 REST 端点和属于它的控制器之间执行集成测试。测试应模拟对数据库的调用,因此在测试期间不会建立数据库连接。

我正在使用 chai-http 对端点进行 HTTP 调用,并使用 sinon-mongoose 对 sinon 进行模拟 Mongoose 模型调用。

const set = [{ _id: 1 }, { _id: 2 }, { _id: 3 }];

//Require the dev-dependencies
const sinon = require('sinon');
const { describe, it } = require('mocha');
require('sinon-mongoose');
const chai = require('chai');
const chaiHttp = require('chai-http');
const server = require('../src/server');

const should = chai.should();

// set up mocks
const MyModel = require('../src/models/myModel');

const MyModelMock = sinon.mock(MyModel);
MyModelMock.expects('find').yields(set);

chai.use(chaiHttp);

describe('My endpoints', () => {
  describe('/GET …
Run Code Online (Sandbox Code Playgroud)

javascript mocha.js mongoose sinon chai

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

不能使用 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
查看次数

Sinon单元测试MySQL连接

我正在尝试对我的 AWS Node Lambda 进行单元测试。我正在使用MySQL。我有一个实用程序文件来获取 MySQL 连接池,它是我的处理程序中的依赖项。我正在尝试通过 Mocha 和 Sinon 对我的处理程序进行单元测试。我想存根或模拟数据库池和连接(没有实际创建数据库连接或访问数据库),但我没有任何运气。有谁知道如何实现这一目标?我创建了以下 2 个文件作为测试工具:

dbConn.js

const mysql = require('mysql2/promise');

async function getPool(options = {}) {
  return await mysql.createPool(optionsClone);
}

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

getEmployees.js

const database = require('./dbConn');

exports.handler = async function(event, context, callback) {
  // Connect to a database via connection pool
  let pool = await database.getPool(dbOptions);
  let conn = await pool.getConnection();

  const dbResult = await conn.query('select * from employees');

  conn.release();

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

javascript mysql unit-testing sinon aws-lambda

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

如何使用 sinon 、 mocha chai 模拟以下代码的响应

谁能帮我编写一个示例测试场景?

storage是一个库(谷歌云)最终在代码行下方将返回一个由文件名和日期组成的数组。

function abc(){
   const files = [];
   files = await storage.bucket(bucketName).getFiles();
   return files;
}
Run Code Online (Sandbox Code Playgroud)

mocha.js sinon google-cloud-storage google-cloud-platform google-cloud-functions

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

如何在 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
查看次数

在赛普拉斯中如何对带有间谍的物体断言?

我正在使用赛普拉斯间谍来测试客户端分析。

我在此测试中的目的是确认identify已这样调用:

identify('myemail@email.com', { groupId: 1002, groupName: "myGroup", someProp: 1, anotherProp: 2 })

我将间谍挂接到全局analytics对象的发射器事件中window:before:load(请注意,while循环是为了处理库加载中的延迟):

Cypress.on("window:before:load", async (win: Window) => {

  const sleep = (n = 1) => new Promise(r => setTimeout(r, n));
  let set = false;
  while (set === false) {
    if (win["analytics"]) {
      set = true;
      const a = win["analytics"];
      const pageSpy = cy.spy().as("page");
      const idSpy = cy.spy().as("identify");
      a.on("page", pageSpy);
      a.on("identify", idSpy);

    } else {
       // default sleep of 1ms. this …
Run Code Online (Sandbox Code Playgroud)

javascript sinon cypress

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