我有一个存根方法,在赛普拉斯控制台中打印以下结构:
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')或在没有可变部分的情况下断言对象的键/值对是可行的,但我很感激使用正则表达式进行断言的任何帮助。
嗨我正在使用fetch测试一个集合,当我调用它时,只有在调用server.response之后才能从假服务器中得到答案.我得到了所需的结果.
这是为什么 ?
我的代码
beforeEach( function() {
server = sinon.fakeServer.create();
server.autoRespond = true;
colhedoraList = new ColhedoraList();
});
.
.
.
var spy = sinon.spy(colhedoraList, 'parse');
server.respondWith("GET", "getColhedoraInfo",
[200, {"Content-Type": "application/json"},
'[{"id":"1","talhaoAtual":1,"posicionamentos":[{"lat":-23.9317401,"lng":-50.2210379,"elevadorLigado":true,"horario":"2012-09-21T11:27:58Z"},{"lat":-23.931544,"lng":-50.2161884,"elevadorLigado":true,"horario":"2012-09-21T11:28:02Z"}]}]']);
colhedoraList.fetch({add: true});
server.respond();
expect(spy).toHaveBeenCalled();
expect(spygmaps).toHaveBeenCalledTwice();
expect(colhedoraList.get(1).get('talhaoAtual')).toEqual(1); <<< ALL EXPECTS FAIL, If I don't call respond().
Run Code Online (Sandbox Code Playgroud) 我想用QUnit和Sinon.Js编写单元测试.我有一个应用程序,用户可以点击按钮和模式对话框来处理下载一些文件.用户可以关闭对话框,它会触发一个方法来运行以重置某些变量.我的测试代码:
$(function() {
$.fn.copy_button = function(){};
ln_download_view = new DownloadModalView();
ln_download_view.modal = {'modal': function() {}};
var download_modal_dialog = $('.download-modal');
download_modal_dialog.modal = function(param){};
var modal_mock = sinon.mock(ln_download_view.modal);
var download_modal_dialog_mock = sinon.mock(download_modal_dialog);
//Should be inserted, because ln_download_view.modal is mocked
//The close button even handler
$('#btn_close_modal').click(function(){
download_modal_dialog.modal('hide');
});
//Dirty stuff to do after the window closes
//Basicly the click triggers this event handler
$('.download-modal').on('hide',function() {
window.clearInterval(window.periodicalTimer);
});
$('div .option-container').click(function() {
if(!$(this).hasClass("selected-option"))
{
$('div #option-presenting').toggleClass("selected-option");
$('div #option-editing-and-presenting').toggleClass("selected-option");
$('.image').toggle();
}
});
module("views");
test("Download modal dialog …Run Code Online (Sandbox Code Playgroud) 假设您正在测试一个函数,该函数将使用不同的参数多次调用依赖项:
var sut = {
ImportantFunction: function(dependency){
dependency("a", 1);
dependency("b", 2);
}
};
Run Code Online (Sandbox Code Playgroud)
使用QUnit + Sinon 并假设调用的顺序并不重要,我可以编写以下测试,确保函数按预期调用依赖项:
test("dependency was called as expected", function () {
var dependencyStub = sinon.stub();
sut.ImportantFunction(dependencyStub);
ok(dependencyStub.calledTwice, "dependency was called twice");
sinon.assert.calledWith(dependencyStub, "a", 1);
sinon.assert.calledWith(dependencyStub, "b", 2);
});
Run Code Online (Sandbox Code Playgroud)
但是,如果订单很重要并且我希望测试将其考虑在内,该怎么办?使用QUnit + Sinon编写此类测试的最佳方法是什么?
我使用了以下方法,但是我正在丢失由sinon断言提供的描述性失败消息(显示预期值和实际值).为此,我只是手动添加了一些描述性消息,但它没有使用具有预期值和实际值的失败消息(并且必须手动维护).
ok(dependencyStub.firstCall.calledWith("a", 1), "dependency called with expected args 'a', 1");
ok(dependencyStub.secondCall.calledWith("b", 2), "dependency called with expected args 'b', 2");
Run Code Online (Sandbox Code Playgroud)
有没有一种方法可以sinon.assert.calledWith像第一次或第二次呼叫那样使用特定呼叫的断言?
这个小提琴的样本设置
所以我正在测试一个调用另一个函数的函数,它返回一个promise,SUT看起来像这样:
fn($modal) ->
modalInstance = $modal.open({
controller: 'myCtrl'
size: 'lg'
})
modalInstance.result.then(updateData)
Run Code Online (Sandbox Code Playgroud)
现在如果我需要测试它,我可以从这样的事情开始:
it 'when modal called, results get updated with right data', ->
$modal = {
open: sinon.stub().returns({
result: $q.when([1, 2, 3])
})
}
fn($modal)
Run Code Online (Sandbox Code Playgroud)
然后检查它updatedData是否等于[1,2,3]
但是我还要确保$modal.open已经调用并且正确的参数已经传递给它.我怎么做?
我不仅需要存根方法而且还要监视它,我是否应该模拟整个$modal?你能用正确的语法帮助我吗?
当我做这样的事情时:
mMk = sinon.mock($modal)
mMk.expects('open')
Run Code Online (Sandbox Code Playgroud)
诗乃对我大喊:
TypeError: Attempted to wrap open which is already stubbed
我有一个可能会抛出错误的方法,但是我在编写SinonJS/Mocha/Should单元测试用例时遇到了麻烦.
被测样本函数:
function testError(value) {
if (!value) {
throw new Error('No value');
return false;
}
};
Run Code Online (Sandbox Code Playgroud)
样品测试:
describe('#testError', function() {
it('throws an error', function() {
var spy = sinon.spy(testError);
testError(false);
spy.threw().should.be.true();
});
});
Run Code Online (Sandbox Code Playgroud)
这输出:
#testError
1) throws an error
0 passing (11ms)
1 failing
1) #testError throws an error:
Error: No value
at testError (tests/unit/js/test-error.js:6:14)
at Context.<anonymous> (tests/unit/js/test-error.js:14:6)
Run Code Online (Sandbox Code Playgroud)
我期待Sinon能够抓住错误并允许我对投掷进行间谍活动,但它似乎没有通过测试.有任何想法吗?
我提到不要sinon.js spys捕获错误?但唯一的解决方案是使用expect.如果可能的话,我更愿意使用单个断言库.
在javascript(ES6)中,我有一个实用程序模块,它只包含一些函数,然后在文件的最后,我这样导出它们:
module.exports = {
someFunction1,
someFunction2,
someFunction3,
}
Run Code Online (Sandbox Code Playgroud)
然后我想为这些函数编写单元测试.一些功能相互依赖; 他们以某种方式相互调用,例如,someFunction1可能会调用someFunction2.没有循环问题.
一切都运作良好,直到我需要窥探其中一个函数被调用.我该怎么做?目前我正在使用Chai和Sinon.
在测试文件中,我将整个文件导入为模块:
const wholeModule = require('path/to/the/js/file')
Run Code Online (Sandbox Code Playgroud)
最后,我的测试如下:
it('should call the someFunction2', (done) => {
const spy = sinon.spy(wholeModule, 'someFunction2')
wholeModule.someFunction1() // someFunction2 is called inside someFunction1
assert(spy.calledOnce, 'someFunction2 should be called once')
done()
})
Run Code Online (Sandbox Code Playgroud)
问题是,测试失败,因为在someFunction1中,someFunction2函数是直接使用的.我将间谍应用于模块对象的功能.但那是一个不同的对象.这是someFunction1的一个例子:
function someFunction1() {
someFunction2()
return 2;
}
Run Code Online (Sandbox Code Playgroud)
我知道它为什么不起作用的原因,但我不知道在这种情况下最好的做法是什么呢?请帮忙!
我有一个问题,测试使用window.DOMParser一些javascript
const stripLink = (url) => {
const parser = new DOMParser()
const link = parser.parseFromString(unescape(url),
'text/html').querySelector('a')
return link ? link.getAttribute('href') : url
}
Run Code Online (Sandbox Code Playgroud)
在摩卡咖啡中测试时会发出警告。
node:22883) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): ReferenceError: DOMParser is not defined
Run Code Online (Sandbox Code Playgroud)
我猜这是因为在节点没有的DOMParser。我该如何解决?我尝试过各种事情,例如
var DOMParser = require('xmldom').DOMParser
sinon.stub(window, 'DOMParser', DOMParser)
Run Code Online (Sandbox Code Playgroud)
想,如果我有XMLDOM解析器它应该工作测试替代window.DOMParser,但事实并非如此。
任何想法如何得到这个工作?
我在index.js中有以下函数代码:
var admin = require('firebase-admin');
admin.initializeApp();
admin.storage();
Run Code Online (Sandbox Code Playgroud)
以及以下测试代码:
var assert = require('assert');
var sinon = require('sinon');
describe('Event Sourcing', function() {
var myFunctions, adminInitStub, adminStorageStub,admin;
before(() => {
admin = require('firebase-admin');
adminStorageStub = sinon.stub(admin, 'storage');
adminInitStub = sinon.stub(admin, 'initializeApp');
myFunctions = require('../index');
});
after(() => {
// Restoring our stubs to the original methods.
adminInitStub.restore();
adminStorageStub.restore();
});
describe('CREATED', function() {
it('should return -1 when the value is not present', function() {
assert.equal(-1, [1,5,3].indexOf(4));
});
});
});
Run Code Online (Sandbox Code Playgroud)
由于某些奇怪的原因,我不断收到以下错误,Error: The default Firebase …
mocha.js sinon firebase google-cloud-functions firebase-storage
我希望能够正确测试我的ES6类,它的构造函数需要另一个类,所有这些看起来像这样:
A级
class A {
constructor(b) {
this.b = b;
}
doSomething(id) {
return new Promise( (resolve, reject) => {
this.b.doOther()
.then( () => {
// various things that will resolve or reject
});
});
}
}
module.exports = A;
Run Code Online (Sandbox Code Playgroud)
B级
class B {
constructor() {}
doOther() {
return new Promise( (resolve, reject) => {
// various things that will resolve or reject
});
}
module.exports = new B();
Run Code Online (Sandbox Code Playgroud)
指数
const A = require('A');
const b = require('b');
const a …Run Code Online (Sandbox Code Playgroud)