【问题标题】:Jasmine: Set controller property on initialization, angular 1.5Jasmine:在初始化时设置控制器属性,角度 1.5
【发布时间】:2016-12-31 10:19:55
【问题描述】:

控制器

功能 SomeController(someService) { 常量 $ctrl = 这个; 启用(); 功能激活(){ someService.retrieveSomeData($ctrl.criteria).then(doSomething); } 功能doSomething(响应){ $ctrl.result = response.data; } }

测试

描述('SomeController', () => { beforeEach(module('myModule')); 让$控制器; beforeEach(注入((_$controller_,) => { $控制器 = _$控制器_; })); it('测试 $controller 属性', () => { 常量 $scope = {}; 常量控制器 = $controller('SomeController', { $scope }); }); });

这里我想在初始化我的控制器时发送$ctrl.criteria,以便之后我可以测试$ctrl.result。

【问题讨论】:

  • 你可以只拥有const controller = $controller('SomeController'),而controller 将拥有this 可用
  • 如您所见,activate()方法在初始化时执行,我尝试在初始化后设置它,但是此时activate()方法已经被触发了。
  • @AbubakrDar 这是组件的控制器吗?
  • 不,不是@SiddharthPandey。它用于显示自定义的 $mdDialog。

标签: javascript angularjs jasmine ecmascript-6


【解决方案1】:

试试这个:

describe('SomeController', () => {

  beforeEach(module('myModule'));

  let $controller;

  beforeEach(inject((_$controller_,) => {
    $controller = _$controller_;
  }));

 it('tests $controller properties', () => {
    const scope = {
      criteria : {id: 1}
    };
    const controller = $controller('SomeController', { $scope : scope });
  });
});

【讨论】:

  • 嗯,我试过这样做,但条件仍然未定义。
  • 我发现,您将控制器属性作为第三个参数传入。
【解决方案2】:

我不确定,如果它是一个通用解决方案或特定于这种情况,但要传入控制器的本地变量,你有 $controller 的第三个参数。 至少,它对我有用。

测试

描述('SomeController', () => { beforeEach(module('myModule')); 让$控制器; beforeEach(注入((_$controller_,) => { $控制器 = _$控制器_; })); it('测试 $controller 属性', () => { 常量 $scope = {}; 常量条件 = {id: 1}; const controller = $controller('SomeController', { $scope }, { criteria }); }); });

【讨论】:

  • 我很惊讶在任何文档或任何易于获得的内容中都找不到此内容。这么简单的解决方案。昨天浪费了几个小时。
猜你喜欢
  • 2016-03-07
  • 2012-12-15
  • 2015-12-25
  • 1970-01-01
  • 1970-01-01
  • 2016-09-09
  • 2021-09-29
  • 1970-01-01
  • 2020-01-24
相关资源
最近更新 更多