2013-01-25 38 views
0

我最近決定使用$resource進行REST服務,但我很快就遇到了麻煩。我有一個簡單的網址:

/R /接口/啓動/主動/地址/:地址

但稱它在單元測試使它失敗:

// expected: POST /r/interface/activate/false/addr/123 
// got  : POST /r/interface/activate/false/addr/@address 

我定義的資源是:

module.factory('NetworkInterfaceActivationService', function ($resource) { 
    return $resource("/r/interface/activate/:active/addr/:address", {}, { 
     activate:{method:'POST', params:{active:"true", address:'@address'}, isArray:false}, 
     deactivate:{method:'POST', params:{active:"false", address:'@address'}, isArray:false} 
    }); 
}); 

這就是我稱之爲我的服務!

$scope.deactivateNetworkAddress = function (address) { 
    NetworkInterfaceActivationService.deactivate({address:address}); 
}; 

我錯過了什麼嗎?

+0

您可以發佈一個蹦牀或小提琴,所以我們可以玩嗎?但是我的直覺告訴你不要在params中使用'@address',因爲它已經在URL中了。順便說一句,你不應該在你的單元測試中使用實際的HTTP方法;你應該用ngMockE2E來嘲笑他們。 –

+0

我試過了,只需點擊我的表單並從瀏覽器中查看網絡。 – Adelin

+0

就像我說過的,如果你可以發佈一個plunker或小提琴,我可以看看代碼。 –

回答

0

我試過你的代碼與Angular 1.3,但我不能重現這個問題。在控制檯

jsFiddle

<button ng-click="parentCtrl.doIt('123foobar')">execute</button> 
app.controller('ParentCtrl', function (NetworkInterfaceActivationService) { 
    this.doIt = function (address) { 
     NetworkInterfaceActivationService.deactivate({address:address}); 
    }; 
}) 

app.factory('NetworkInterfaceActivationService', function ($resource) { 
    return $resource("/r/interface/activate/:active/addr/:address", {}, { 
     activate:{method:'POST', params:{active:"true", address:'@address'}, isArray:false} 
    }); 
}); 

HTTP調用:

POST .../R /接口/激活/假/地址/ 123foobar

+0

當我有時間在項目上工作時,我會檢查它是超時項目:P – Adelin