- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在指令中模拟 $stateParams 的最佳方法是什么? $stateParam 成员会根据测试而改变。
我可以使用 $controller('ctrl', $stateParams) 在 Controller 中轻松模拟 $stateParams,但不知道如何修改注入(inject)指令的 $stateParams。
我已经用下面的方法装饰了 $stateParams 但只能在我创建模块时声明。正如我所提到的,$stateParam 成员将通过不同的测试多次更改。
beforeEach(angular.mock.module(function ($provide) {
$provide.provider('$stateParams', function () {
return {
myStateParam: true,
myOtherStateParam: 'some text'
};
});
}));
最佳答案
使用指令 Controller 来处理与路由相关的逻辑( $state
/$route
)总是一个好主意,这是 Controller 的工作,而不是链接功能。
对于可以通过测试其 Controller 并模拟其本地依赖项来完全测试的指令(信用转到 JB Nizet 的回答),故事就结束了:
$controller('...', { $scope: scope, $stateParams: { ... });
$compile
的常规指令规范并非如此.
$compile
使用
$controller
在内部实例化 Controller ,但不接受本地人来模拟其依赖关系。
$stateParams
不必直接注入(inject)到规范中,因此没有实例化,它的值可以在模块引导后定义。当每个规范只应该模拟一次服务实例值时,不要再看了:
var stateParams;
beforeEach(module(('...', function ($provide) {
$provide.factory('$stateParams', function () {
return stateParams;
});
}));
it('...', inject(function ($compile) {
stateParams = { ... };
...
$provide
服务商
can be exposed as service instance在模块被引导后(重新)定义服务:
beforeEach(module('...', function ($provide) {
$provide.value('$provide', $provide);
}));
it('...', inject(function ($provide, $compile) {
$provide.constant('$stateParams', { ... });
...
$provide.constant
在这种情况下更可取,因为它将替换缓存的
$stateParams
服务实例,如果它之前被注入(inject),而
$provide.value
惯于。
angular.copy
(UI Router 0.x 实际上使用它来保持
$stateParams
对象最新)可用于保留现有对象引用但替换其内容:
it('...', inject(function ($stateParams, $compile) {
angular.copy({ ... }, $stateParams);
...
$state
服务鲜为人知
publicly exposed to API房产
params
,它可以用作
$stateParams
的替代品服务所有代码以提高其可测试性。
$stateParams
和
$state.params
可能不是指同一个对象,因此必须做出有利于其中一个的选择。
$state
导致的测试脆弱性风险为代价注入(inject),它可以像
it('...', inject(function ($state, $compile) {
$state.params = { ... };
...
关于angularjs - 指令中的 angular + jasmine + mock $stateParams,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35899581/
我正在使用 angular ui 路由器制作应用程序。 当导航到总是有参数传递给它的特定状态时,我需要能够在不重新加载 View 的情况下更改 url 并更新参数。 在我的状态配置中,我使用: 重新加
我定义了这些路线: .state('sport', url: '/sport' templateUrl: '/templates/sport' contro
我在 ui-router 上有条件参数,因为我在应用程序的不同位置使用相同的屏幕。我必须编写逻辑来检查我分配给 paramId 的 $stateParams 值。我尝试过使用 if 和 else。 是
我正在尝试从 URL 获取纬度和经度变量,并将它们分配给 Google map 的“center”属性。我没有收到任何错误,但我提醒屏幕中心对象,“纬度”和“经度”都为空。 这是网页:http://a
在 ionic/Angularjs 项目中,当在某种状态下的列表中单击一个项目时,如何设置规则以通过在此列表中单击的项目的 itemID 来提取下一个 View 上的数据? 代码太长,无法粘贴到此处,
好吧,在 stateParam 中我知道如何设置一个数字,例如 /新/123432 $stateProvider .state('contacts', { url: "/new
单击“计数”页面的链接时,我可以传递路由器参数 $state.go('count', {targetName: object.name}) 因为路由器中建立的内容如下所示: url: '/count/
我在 SO 看到了很多类似的问题,但这些解决方案对我不起作用:( 关于我的网站和应用:后端是带有 json api 的 wordpress,angular 应用程序在 mysite.lc/catalo
我在主页上有三个按钮。 -Naruto 300 // When I hover on button its says "oku/300". -Bleach 300 // When I hover on
我正在使用 UI-Router。这是我通过 ui-sref 路由到的状态之一: .state("community", { url: "/community/:community_id",
我希望能够在我的 run 函数中访问 url 参数,并根据这些参数执行操作。但是,我很惊讶地看到 ui.router 的 $stateParams 对象在我的运行函数中是空的。 angular.mod
我有一个带有大量状态的 ui-router 应用程序,我需要能够通过 $stateParams 传递模型。在每个 $http 请求中,我都会检查从服务器返回的“STATE”参数的响应。如果存在,我执行
有什么区别: $routeParams and $stateParams 什么时候用什么? 最佳答案 两者都来自不同的路由器模块。您可以在您的应用程序中使用任何人。 如果您使用 ngRoute模块,那
我想知道如何在重新加载页面后保留 $stateParams 变量。 .state('proSearch', { url: '/proSearch/:city',
我花了好几个小时才弄清楚我的代码出了什么问题。 $stateParams.id 始终未定义。这是我的 Controller : .controller('ordersCtrl', [ '$sc
我尝试在我的服务中的以下工厂内获取页面 post/:postId 上的 JSON 数据: angular.module('sampleapp.services', []) .factory('
我使用的是 angular 1.5.x 和 babel。我想在第一页传递一个字符串,然后在第二页显示它。我有这两种状态: 第一状态 .state('outside'{ url:'/outside',
请帮我解决 ionic $stateParams 问题。 这里是状态配置 .state('tabs.categories', { url: "/categories/:parentID",
我尝试使用 stateParams 作为 ng-repeat 的过滤器。我正在尝试创建用户个人资料页面,当有人访问该网址时 http://localhost:3000/users/johnexampl
我有这个状态: .state('admin.category',{ url: '/category', templateUrl:'views/admin.category.html
我是一名优秀的程序员,十分优秀!