- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我想在我的 Jasmine 测试中模拟测试数据。这里有两个版本:
// version 1:
spyOn(mBankAccountResource, 'getBankAccountData').and.callFake(fakedFunction);
// version 2:
spyOn(mBankAccountResource, 'getBankAccountData').andCallFake(fakedFunction);
当我使用浏览器(Chrome、Firefox)执行测试时,第一个版本可以正常工作。但是,当我用 phantomjs 运行相同的测试时,我必须使用第二个版本。否则,它会提示函数未定义。
错误信息如下:
// phantomjs (with version 1)
TypeError: 'undefined' is not an object (evaluating 'spyOn(mBankAccountResource, 'getBankAccountData').and.callFake')
at /home/phil/workspaces/world/basket.angular.ui/basket.angular.ui/test/bankaccount/BankAccountCtrlTest.js:65
at invoke (/home/phil/workspaces/world/basket.angular.ui/bower_components/angular/angular.js:3707)
at workFn (/home/phil/workspaces/world/basket.angular.ui/bower_components/angular-mocks/angular-mocks.js:2149)
undefined
// Chrome (with version 2)
TypeError: Object function () {
callTracker.track({
object: this,
args: Array.prototype.slice.apply(arguments)
});
return spyStrategy.exec.apply(this, arguments);
} has no method 'andCallFake'
at Object.<anonymous> (/home/phil/workspaces/world/basket.angular.ui/basket.angular.ui/test/bankaccount/BankAccountCtrlTest.js:65:59)
at Object.invoke (/home/phil/workspaces/world/basket.angular.ui/bower_components/angular/angular.js:3707:17)
at Object.workFn (/home/phil/workspaces/world/basket.angular.ui/bower_components/angular-mocks/angular-mocks.js:2149:20)
我搜索了 Jasmine API,但找不到哪个版本是正确的。我发现的所有示例似乎都使用第二个版本。
Jasmine 的 API 最近有变化吗?我怎样才能编写我的测试,让它始终有效?
最佳答案
是的, spy API 从 Jasmine 1.3.1 更改为 Jasmine 2.0。没有“正确”的版本。如果你能找到 Jasmine 2.0 的工具支持,我会建议升级。
Jasmine 1.3.1 语法(documentation [archived link])
spyOn(mBankAccountResource, 'getBankAccountData').andCallFake(fakedFunction);
expect(mBankAccountResource.getBankAccountData.mostRecentCall.args).toEqual(["foo"]);
Jasmine 2.0 语法(documentation [archived link])
// Methods moved to 'and' property
spyOn(mBankAccountResource, 'getBankAccountData').and.callFake(fakedFunction);
// Call data moved to 'calls' property
expect(mBankAccountResource.getBankAccountData.calls.mostRecent().args).toEqual(["foo"]);
我提到了工具支持,因为这似乎就是您遇到的问题。 Jasmine 2.0 才推出几个月(在撰写本文时)。相比之下,Karma 中对 Jasmine 2.0 的支持已经推出几周了(我不确定其他工具)。
要解决您的问题,请调查您正在使用哪些工具来运行测试,看看它们是否支持 Jasmine 2.0。如果他们都这样做,那就去升级吧。否则,将您的浏览器测试降级到 Jasmine 1.3.1 并等待工具支持更好。只要确保您在所有方面都保持一致即可。
关于javascript - Jasmine :spyOn(obj, 'method').andCallFake 或 and.callFake?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22041745/
这是聊天机器人的(截取的)代码。我想重写 sendMessage() 函数以仅回显消息参数。在这种情况下,原始函数运行并在函数的第二行给出错误。显然,模块没有加载,我也不需要它们。这是对事件处理程序回
我有一个返回函数引用的方法。 function methodetobeMoked(param){ case1:return func1; case 2: return func2; . .
在我的 Controller 中,我调用了 http 服务。这是我的 Controller : myApp.controller('MyController', function MyControll
我正在尝试创建一个规范来测试我的 Angular 服务中发出 GET 请求的方法。我遇到的困难是模拟该方法以使其返回错误而不是响应。如果我无法让它返回错误(例如 400 或 500),我就无法提供完整
如何在 Sinon 中编写一个调用 Fake 的 spy ,类似于 Jasmine? Jasmine : spyOn(window, "requestAnimationFrame").and.call
我之前在其他 Controller 上编写过一些这样的测试,并且效果很好。但在这个更复杂的 Controller 上,无论我在哪个函数上测试它,使用 $q 的 .callFake 都不会进入 .the
我有一个场景,我想在调用回调后在 beforeEach 上调用 done()。 我尝试按如下方式执行此操作: spyOn(scope, 'onAdmin').and.callThrough().and
我以前在 jasmine 中有 spyOn().and.callFake,它对我的测试有很大帮助,现在我正在使用 Jest,我在文档中发现 jest.spyOn() 存在但没有 callFake。
callFake和returnValue的唯一区别是callFake可以根据自定义逻辑(参数/环境)返回不同的值? 还有其他区别吗? 最佳答案 callFake(() => {...}) 接受回调函数
我正在学习实现 karma & Jasmine在 AngularJS 中,我将通过一些示例来更好地理解它。 我对 callThrough 有点困惑. 如果理解有误,请指正,与callFake()略有相
我是 Jasmine 的新手并且在上述两个功能之间有点混淆。我的唯一目的是为 spy 功能提供虚假实现。但是,如果我把调试器放在 callFake它正在被调用,但是 and.stub的函数没有被调用。
我正在寻找 sinonjs 中的 jasmine.createSpy().and.callFake(fn) 的等价物。 例如: const mySpy = jasmine.createSpy('my
我有以下功能,它使用 promise 和 .finally 进行服务调用: myService.getStuff().then(function() { this.doStuffWhenServ
我正在使用 jasmine 的 new syntax (so no waits, or runs)用于测试异步操作,但遇到了麻烦。 我想做的是确保在模型触发 sync 事件时调用渲染函数。这个例子很简
我想在我的 Jasmine 测试中模拟测试数据。这里有两个版本: // version 1: spyOn(mBankAccountResource, 'getBankAccountData').and
我是一名优秀的程序员,十分优秀!