angularjs - Jasmine spyOn函数和返回的对象

标签 angularjs unit-testing meteor jasmine angular-mock

我正在将MeteorJS与angular一起使用,并想测试 Controller 。我的 Controller 使用$ reactive(this).attach($ scope)。我需要检查是否调用了此方法。

我为 spy 创建了类似的东西:

var $reactive = function(ctrl) {
    return {
        attach:function(scope) {}
    }
};

所以我可以这样称呼它:
$reactive('aaa').attach('bbb');

我如何在测试中做到这一点?
spyOn($reactive, 'attach');

不起作用我得到了错误:attach()方法不存在

以及如何检查它是否被调用?
这是好电话吗?
expect($reactive).toHaveBeenCalledWith(controller);

以及如何检查使用args(作用域)调用了函数attach?

最佳答案

您需要模拟$reactive组件。将其替换为在测试范围内返回spyObj的 spy 。然后触发使$reactive方法运行和测试的内容。

var reactiveResult = jasmine.createSpyObj('reactiveResult', ['attach']);
var $reactive = jasmine.createSpy('$reactive').and.returnValue(reactiveResult);
var controller = {};
    beforeEach(function () {
      module(function ($provide) {
        $provide.factory('$reactive', $reactive);
      });
      module('yourAppModule');
    });

it('Should call attach', function () {
  $reactive(controller).attach();
  expect($reactive).toHaveBeenCalledWith(controller);
  expect(reactiveResult.attach).toHaveBeenCalled();
}) ;

您也可以将$reactive spy 提供给 Controller 依赖项:
var reactiveResult = jasmine.createSpyObj('reactiveResult', ['attach']);
var $reactive = jasmine.createSpy('$reactive').and.returnValue(reactiveResult);
var ctrl;
    beforeEach(inject(function ($controller) {
      ctrl = $controller('YourController', {$reactive: $reactive });
    }));

it('Should call attach', function () {
  //ctrl.triggerThe$reactiveCall
  expect($reactive).toHaveBeenCalledWith(ctrl);
  expect(reactiveResult.attach).toHaveBeenCalled();
}) ;

关于angularjs - Jasmine spyOn函数和返回的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35173907/

相关文章:

javascript - 从 HTML 和 JS 文件中提取翻译

javascript - 是否可以在 AngularJS 中模拟按键?

javascript - Angular中的http服务发送post数据作为请求正文的键,没有值

javascript - 客户端-服务器架构结构(使用node js)-index.html 文件放在哪里?

unit-testing - 大项目,严重缺乏测试覆盖率,您将如何解决这个问题?

java - 单元测试期间无法加载ApplicationContext

javascript - 创建 nw.js + Meteor 桌面应用程序

ios - 添加类 UITest 目标时出错

javascript - Meteor:如何在表中滚动数据?

javascript - cytoscape.js 和meteor 简单示例不起作用