我正在使用 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'})不管用。
我已经为下面的函数编写了测试用例(我省略了很多不必要的代码,只提供了必要的东西,但如果你需要任何其他信息,请告诉我)。
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)我正在使用 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) 我刚刚将 lodash 导入从 更改为import _ from 'lodash';在import debounce from 'lodash/debounce';
我的测试中我曾经有sandbox.stub(_, 'debounce').returnsArg(0);,但现在我不知道将其更改为什么。显然sandbox.stub(debounce).returnsArg(0);行不通。不知道当仅从模块导出单个函数时该怎么做。
我正在尝试编写一个单元测试,它应该在 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) 我看过几个类似的问题,但没有一个案例适合我的问题。我正在尝试模拟我在其他测试中完成的构造函数,但是在使用 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) 我正在尝试对我的 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) 谁能帮我编写一个示例测试场景?
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
我有一个模块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,但遇到了问题。有什么帮助吗?
我正在使用赛普拉斯间谍来测试客户端分析。
我在此测试中的目的是确认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) sinon ×10
javascript ×5
mocha.js ×4
node.js ×4
unit-testing ×4
testing ×3
chai ×2
proxyquire ×2
async-await ×1
aws-lambda ×1
cypress ×1
mongoose ×1
mysql ×1
promise ×1