Javascript 为什么$httpBackend不';t填充参数

Javascript 为什么$httpBackend不';t填充参数,javascript,angularjs,single-page-application,angularjs-e2e,httpbackend,Javascript,Angularjs,Single Page Application,Angularjs E2e,Httpbackend,我有一个$资源,用于处理实体的CRUDHTTP请求。它被包装在我的定制服务中,目前没有添加任何功能,所以没关系-它只是一个旧的普通$resource: app.factory('coursesService', ['$resource', coursesService]); function coursesService($resource) { return $resource('/api/courses/:id', { id: '@id' }, { update: {

我有一个$资源,用于处理实体的CRUDHTTP请求。它被包装在我的定制服务中,目前没有添加任何功能,所以没关系-它只是一个旧的普通$resource:

app.factory('coursesService', ['$resource', coursesService]);

function coursesService($resource) {
    return $resource('/api/courses/:id', {
  id: '@id'
}, {
  update: {
    method: 'PUT'
  }
});
}

因此,我试图删除控制器中的一个实例(存储在控制器对象的
courseToDelete
属性中):

我正在使用ngMockE2E模块中的$httpBackend服务模拟后端:

$httpBackend.whenDELETE(/api\/courses\/(.+)/, undefined, undefined, ['id'])
  .respond(function(method, url, data, headers, params) {
    clientStorage.deleteCourse(params.id);
    return [200, {}];
  });
因此,当$resource发送DELETE-http请求时,我希望能够将其从本地存储中删除(因为我没有后端,数据以序列化JSON字符串的形式存储在本地存储中)

我正在尝试删除的对象:

 {
      id: 1,
      name: 'Course 1',
      duration: 380,
      description: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.' +
      ' Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.' +
      ' Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur' +
      ' sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.',
      created: new Date(2011,10,30),
      authors: [
        'Пушкин', 'Лермонтов'
      ]
    }

从中,我希望我的
params
参数将具有
id
属性,但是当函数执行时,
params
是未定义的,尽管所有其他参数看起来都很好。我做错了什么?

来自angular$httpBackend docs

whenDELETE(url、[headers]、[keys])

但是当删除(url,未定义,未定义,[键])时,您正在使用

因此,您的
keys
参数未定义,并且没有任何内容作为参数传递


更新:注意:1.4.8及更早版本未实现此功能

courseToDelete对象的外观如何?它有Id属性吗?@Gustav,我将此信息添加到问题中我更喜欢$httpBackend.expectDELETE到$httpBackend.whenDELETE。。。使用expect,您可以在预期调用时在单元测试中使用$httpBackend.flush()。这将确保调用已发出,否则测试将失败。whenDELETE不会导致测试失败,如果调用从未进行过,那么您无法确定调用是否在单元测试中进行过。您是说我应该这样重写:
$httpBackend.whenDELETE(/api\/courses\/(.+)/,undefined,['id'))
?是的,结果与此完全相同您使用的是什么版本?为1.5.0编写的文档。1.4.8及更早版本没有实现此功能。我想我别无选择,只能手动解析url并提取所需参数。好的,谢谢!如果根据您最后的评论编辑您的答案,我将接受。
 {
      id: 1,
      name: 'Course 1',
      duration: 380,
      description: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.' +
      ' Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.' +
      ' Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur' +
      ' sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.',
      created: new Date(2011,10,30),
      authors: [
        'Пушкин', 'Лермонтов'
      ]
    }