标签: sinon-chai

使用超级调用来存储javascript方法

我正在尝试测试在其父级中调用类方法的ES6类方法.例如:

Polygon.js

class Polygon {
    verifyDimensions() {
        this.allSidesValid();
    }
}
export default Polygon;
Run Code Online (Sandbox Code Playgroud)

Square.js

import Polygon from './Polygon';
class Square extends Polygon {
    verifyDimensions() {
        super.verifyDimensions();
        if( this.height !== this.width ) {
            throw new Error( 'Not square' );
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我想测试Square的verifyDimensions而不调用Polygon的verifyDimensions.使用sinon/chai进行测试似乎babeljs在创建类时正在制作源方法的副本.这使得它很难被删除.

例如,如果我像这样设置我的测试:

Square.spec.js

beforeEach( () => {
    sinon.stub( Polygon.prototype, 'verifyDimensions' );
    context.verifyDimensions = Square.prototype.verifyDimensions;
} );
Run Code Online (Sandbox Code Playgroud)

super.verifyDimensions()仍将是指Polygon.prototype.verifyDimensions,将错误的测试.

javascript unit-testing ecmascript-6 babeljs sinon-chai

5
推荐指数
0
解决办法
564
查看次数

如何将 sinon js 与 Express js 单元测试结合使用

您好,我想对我的 Express JS 代码进行单元测试,我想模拟数据,因此在搜索多个网站和博客后,我找到了这个库,但我不清楚如何使用这个库进行模拟或数据。我的测试代码是

var request = require('supertest');
var server = require('./app');
var chai = require('chai');
var chaiHttp = require('chai-http');

var server = require('./app');

var should = chai.should();
chai.use(chaiHttp);

describe('loading express', function () {

  it('responds to /', function testSlash(done) {
    request(server)
      .get('/')
      .expect(200, done);
  });

  it('404 everything else', function testPath(done) {
    request(server)
      .get('/foo/bar')
      .expect(404, done);
  });

  it('responds to /customers/getCustomerData', function testPath(done) {
    request(server)
      .get('/customers/getCustomerData?id=0987654321')
      .end(function(err, res){
        res.should.have.status(200);
        res.body.should.be.a('object');
        res.body.status.should.equal("success");
        res.body.data.customerId.should.equal("0987654321");

        done();
      });
  });

});
Run Code Online (Sandbox Code Playgroud)

目前此代码正在从数据库获取数据,但我想使用模拟数据进行单元测试。我怎样才能做到这一点?

__编辑__

我想测试 Express …

unit-testing node.js express sinon sinon-chai

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

等待sinon残缺的承诺解决,然后再对sinon间谍进行断言

我有一个中间件功能,该功能检查会话令牌以查看用户是否为管理员用户。如果所有检查均通过,该函数将不返回任何内容,而仅调用next()。

我如何等待内部异步Promise(adminPromise)解析,然后再对Sinon间谍的next()回调进行断言?当前测试将失败,因为测试中的断言是在AdminMiddleware.prototype.run中的承诺解析之前进行的。

该函数是:

AdminMiddleware.prototype.run = function (req, res, next) {
  let token        = req.header(sessionTokenHeader);
  let adminPromise = new admin().send()

  adminPromise.then(function (authResponse) {
    let adminBoolean = JSON.parse(authResponse).payload.admin;

    if (adminBoolean !== true) {
      return new responseTypes().clientError(res, {
          'user': 'validation.admin'
      }, 403);
    };

    next();
  });
};
Run Code Online (Sandbox Code Playgroud)

和测试:

it('should call next once if admin', function (done) {
    stub = sinon.stub(admin.prototype, 'send');
    stub.resolves(JSON.stringify({success : true, payload : {admin : true}}));
    let nextSpy = sinon.spy();

    AdminMiddleware.prototype.run({header: function () {}}, {}, nextSpy);
    expect(nextSpy.calledOnce).to.be.true;
    done();
});
Run Code Online (Sandbox Code Playgroud)

目前,我正在包装如下所示的期望,这将导致测试通过,但看起来像是hack。此外,如果失败,由于未调用done(),将导致未处理的承诺拒绝错误和超时。

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

javascript mocha.js sinon sinon-chai

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

如何使用sinon/chai测试axios请求参数

我试图使用sinon/chai/mocha来测试axios调用的参数,以确认某些参数的存在(理想情况下它们是有效的日期).

示例代码(在类myclass中)

fetch() {
  axios.get('/test', { params: { start: '2018-01-01', end: '2018-01-30' } })
  .then(...);
}
Run Code Online (Sandbox Code Playgroud)

示例测试

describe('#testcase', () => {
  let spy;
  beforeEach(() => {
    spy = sinon.spy(axios, "get");
  });
  afterEach(() => {
    spy.restore();
  });
  it('test fetch', () => {
    myclass.fetch();
    expect(spy).to.have.been.calledWith('start', '2018-01-01');
    expect(spy).to.have.been.calledWith('end', '2018-01-30');
  });
});
Run Code Online (Sandbox Code Playgroud)

不过,我已经尝试了许多选择,包括的匹配,expect(axios.get)... expect(..).satisfy,getCall(0).args和爱可信-模拟适配器,但我无法弄清楚如何做到这一点.我错过了什么?

javascript sinon chai sinon-chai

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

nodejs:如何使用 sinon 存根 AWS s3 getobject

我正在尝试编写单元测试,但在存根 AWS S3 getobject 方法时遇到问题。这是我的代码:

describe('testExecuteSuccess()', function () {
    it('Test execution with id is successful.', async () => {
        let id = "test_id";
        const getObjectStub = AWS.S3.prototype.getObject = sinon.stub();
        getObjectStub.returns({ promise: () => Promise.resolve({ Body: "test" }) });
        await executionHandler.execute(id).then(() => {
            getObjectStub.should.have.been.calledOnce;
        });
    });
});
Run Code Online (Sandbox Code Playgroud)

有谁知道它有什么问题/如何正确存根 getObject 方法?当我运行测试时,我得到InvalidParameterType: Expected params.Bucket to be a string证明存根不起作用。

这是 executionHandler.execute 方法的代码:

exports.execute = async function(curr_id) {
    let params = { Bucket: BUCKET_NAME, Key: KEY_PATH }
    let fileObject = await s3.getObject(params).promise();
    let …
Run Code Online (Sandbox Code Playgroud)

amazon-s3 node.js sinon chai sinon-chai

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

单元测试Firebase的云功能:使用sinon.js测试/模拟`transaction`s的"正确方法"是什么

男人,这个firebase单元测试真的踢我的屁股.

我已经阅读了文档并阅读了他们提供的示例,并且已经对我的一些基本的Firebase功能单元进行了测试,但是我一直遇到问题,我不知道如何验证transactionUpdated函数是否传递到refs .transaction正确更新current对象.

我的斗争可能最好用他们的child-count示例代码和我在为其编写单元测试时做出的不良尝试来说明.

假设我想要进行单元测试的函数执行以下操作(直接从上面的链接中获取):

// count.js
exports.countlikechange = functions.database.ref('/posts/{postid}/likes/{likeid}').onWrite(event => {
      const collectionRef = event.data.ref.parent;
      const countRef = collectionRef.parent.child('likes_count');

      // ANNOTATION: I want to verify the `current` value is incremented
      return countRef.transaction(current => {
        if (event.data.exists() && !event.data.previous.exists()) {
          return (current || 0) + 1;
        }
        else if (!event.data.exists() && event.data.previous.exists()) {
          return (current || 0) - 1;
        }
      }).then(() => {
        console.log('Counter updated.');
      });
    });
Run Code Online (Sandbox Code Playgroud)

单元测试代码:

const chai …
Run Code Online (Sandbox Code Playgroud)

unit-testing sinon firebase sinon-chai google-cloud-functions

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

如何在 Chai 中模拟或存根 'instanceof' | 诗农 | 摩卡

我有一个需要模拟或存根数据的情况。

    var array =['add','divide']
    var add =listMehtod[0];
    if(add instanceof Calculator){  // how to test this ?
       // some logic
     }
Run Code Online (Sandbox Code Playgroud)

基本上我必须为内部逻辑编写一些测试用例,但问题是第一个 if 语句我无法通过。有什么方法可以通过 chai 或 sinon 来处理它吗?

测试用例 :

  var a = new Calculator();
  expect(a).to.be.instanceOf(Calculator) // this is returning false
Run Code Online (Sandbox Code Playgroud)

javascript unit-testing sinon chai sinon-chai

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

Cypress:使用正则表达式断言存根函数的参数

我有一个存根方法,在赛普拉斯控制台中打印以下结构:

myMethod('start', Object{5})

我知道该对象有一个键,segmentB-> 当控制台将其记录在存根中时,我看到它,但我不想开始在存根中进行断言

我想断言,segmentB 的值以'MPI_'

我虽然将“应该通过匹配来调用”和 Cypress.sinon 断言结合起来,如下所示,但它不起作用。

 cy
        .get('@myMethod')
        .should('be.calledWithMatch', 'start', {
          segmentB: Cypress.sinon.match(/^MPI_/)
      })
Run Code Online (Sandbox Code Playgroud)

.should('beCalledWithMatch', 'start')或在没有可变部分的情况下断言对象的键/值对是可行的,但我很感激使用正则表达式进行断言的任何帮助。

regex assertion sinon sinon-chai cypress

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

如何使用sinon对localStorage进行单元测试

我正在尝试localStorage使用sinon 进行测试.基本上我对单元测试很新,所以这可能是非常基础的.

更新

我设法提出这个,但现在它给了我一个新的错误 Should wrap property of object

测试

describe('Initial State', () => {
    it('should set the initial state for the component', () => {
const props = {
        currentUser: {}
      };
      sinon.stub(window.localStorage, 'setItem');
      window.localStorage.setItem('none', 'nothing');
    });
  });
Run Code Online (Sandbox Code Playgroud)

unit-testing sinon reactjs sinon-chai enzyme

3
推荐指数
2
解决办法
6090
查看次数

如何使用 Mocha Chai Sinon 检查元素是否存在?

我想知道如何通过 id 或 class 检查 UI 上的元素是否存在。我用的是茶匙摩卡、诗浓和柴。

我尝试了下一个但它不起作用:

expect($('my-id')).to.be.true;
Run Code Online (Sandbox Code Playgroud)

javascript mocha.js chai teaspoon sinon-chai

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

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