我正在尝试测试在其父级中调用类方法的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,将错误的测试.
您好,我想对我的 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 …
我有一个中间件功能,该功能检查会话令牌以查看用户是否为管理员用户。如果所有检查均通过,该函数将不返回任何内容,而仅调用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) 我试图使用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和爱可信-模拟适配器,但我无法弄清楚如何做到这一点.我错过了什么?
我正在尝试编写单元测试,但在存根 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) 男人,这个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
我有一个需要模拟或存根数据的情况。
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) 我有一个存根方法,在赛普拉斯控制台中打印以下结构:
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')或在没有可变部分的情况下断言对象的键/值对是可行的,但我很感激使用正则表达式进行断言的任何帮助。
我正在尝试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) 我想知道如何通过 id 或 class 检查 UI 上的元素是否存在。我用的是茶匙摩卡、诗浓和柴。
我尝试了下一个但它不起作用:
expect($('my-id')).to.be.true;
Run Code Online (Sandbox Code Playgroud) 我已经进入了单元测试阶段,说实话,网上所有不同的例子让我感到困惑。我对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) sinon-chai ×11
sinon ×9
unit-testing ×6
javascript ×5
chai ×4
node.js ×3
mocha.js ×2
amazon-s3 ×1
assertion ×1
babeljs ×1
cypress ×1
ecmascript-6 ×1
enzyme ×1
express ×1
firebase ×1
reactjs ×1
regex ×1
teaspoon ×1