当两者都是对象数组时,断言预期结果与实际结果相匹配的最佳方法是什么?我的直接想法是使用Array原型(prototype)过滤器并检查交集是否与预期的大小相同,即:describe('select',function(){it("shouldreturnselectedcolumns",function(done){varquery="selectlunchTime,name";varactual=...resultsofthequery,anarrayofanonymousobjects...//expectedresultsvarexpected=[{"lunchTime":"12
我有一个要测试的简单javascript包。我想检查是否抛出了错误,但是当我的测试运行并抛出错误时,测试被标记为失败。代码如下:varshould=require('chai').should(),expect=require('chai').expect();describe('#myTestSuite',function(){it('shouldcheckforTypeErrors',function(){//Pulledstraightfromthe'throw'sectionof//http://chaijs.com/api/bdd/varerr=newReferenceErr
我试图断言一个对象包含另一个对象(即不能使用deepequal),但似乎严格检查了嵌套对象。代码示例:describe('Meta',function(){it('objectshouldcontainsaclonedcopy',function(){varobj={a:1,b:'2',c:{a:2,b:'2'}};returnexpect(obj).deep.contains(JSON.parse(JSON.stringify(obj)));});});错误信息:AssertionError:expected{a:1,b:'2',c:{a:2,b:'2'}}tohaveaproper
最近,我和一位同事对使用Protractor和Chai实现Cucumber步骤定义的“正确”方式存在一些分歧。我们的争论源于对Cucumber上下文中promise解决方案的确切情况的相互缺乏理解。我们正在针对AngularJS应用程序进行测试,因此解决promise和异步行为是不可避免的。我们遇到的最大问题是强制执行同步测试行为并让Cucumber在步骤定义之间等待promise。在某些情况下,我们观察到这样的情况,即Cucumber似乎在Webdriver执行步骤定义之前就直接完成了步骤定义。我们对这个问题的解决方案各不相同......考虑假设场景:Scenario:Whenaus
我正在使用chai-as-promised测试一些promise。我的问题是我不确定如何在单个测试中有多个expect语句。为了让expect().to.be.fulfilled正常工作,我需要返回它,如下所示:it('test',()=>{returnexpect(promise).to.be.fulfilled}...或者使用notify,像这样:it('test',(done)=>{expect(promise).to.be.fulfilled.notify(done)}当我有另一件事需要检查时,例如某个函数被调用时,问题就来了,如下所示:it('test',(done)=>{v
我在JSView中有一个函数,如果窗口宽度小于1000,它会执行一些操作。我正在尝试使用Mocha、chai为此编写单元测试,并通过Phantom/Chrome/中的karma测试运行器运行测试Chromium浏览器。我还使用sinon对方法进行stub并使其返回一些所需的值。现在有一个条件检查,如果窗口宽度小于1000,那么我怎么能stub呢,我正在尝试类似下面的方法,sinon.stub($(window).width());$(window).width().returns(900);但它不起作用。有什么特定的方法可以stub$(window).width()值吗?
我想在以下响应中模拟对obj.key3值的不同响应。就像ifobj.key3=true然后返回与obj.key3=false不同的响应functionmethod(obj){returnanotherMethod({key1:'val1',key2:obj.key3});} 最佳答案 您可以使用.withArgs()和对象匹配器根据调用它的参数使stub返回(或执行)某些操作。例如:varsinon=require('sinon');//Thisisjustanexample,youcanobviouslystubexistingm
说真的,我想不通。文档给了我们:stub.callsArg(index)-使stub调用提供的索引处的参数作为回调函数。stub.callsArg(0);使stub调用第一个参数作为回调。但是,我不知道要索引到的参数列表在哪里。也许我只是不明白什么是stub... 最佳答案 stub是具有可编程行为的noop函数。在您的情况下,callsArg(index)将对stub进行编程以期望在index处有一个函数并立即调用它。functionsayHi(){console.log('hi');}varstub=sinon.stub().c
我正在尝试使用chaijs断言编写单元测试,并且想知道如何期望长度为零的数组作为值。我的测试函数期望语句:returnexpect(functionRetuningPromise()).toeventually.have.property("key1",[]);运行mocha的控制台输出:AssertionError:expected{otherkey:otherVal,key1:[]}tohaveaproperty'key1'of[],butgot[]我试过deep.property,key1:"[]"但没有成功 最佳答案 我忽略
我正在尝试对文件中的一个函数进行单元测试,同时对同一文件中的另一个函数进行stub,但没有应用模拟,而是调用了真实的方法。这是一个例子://file:'foo.js'exportfunctiona(){//.....}exportfunctionb(){letstuff=a();//calla//...dostuff}还有我的测试:import*asactionsfrom'foo';constaStub=sinon.stub(actions,'a').returns('mockedreturn');actions.b();//b()isexecuted,whichcallsa()ins