1
我正在爲控制器名稱構建測試GeneController使用名爲基因的服務進行一堆API GET請求。我嘲笑這樣的主要GET請求,我敢肯定它的正常工作:嘲笑的後端GET請求未被服務方法捕獲
$httpBackend.expectGET '/api/knowledge/genes/param1'
.respond(200, JSON.stringify({
data: {
mutationsUrl: 'http://localhost:3000/api/knowledge/genes/param1/mutations',
frequenciesUrl: 'http://localhost:3000/api/knowledge/genes/param1/frequencies',
annotationUrl: 'http://localhost:3000/api/knowledge/genes/param1/annotation',
sections: {
description: {
data: 'holder'
}
}
}
}))
控制器: GeneController
.controller 'GeneController', Array '$scope', '$routeParams', '$http', 'Gene', ($scope, $routeParams, $http, Gene) ->
$scope.entity = Gene.get($routeParams
(entity) ->
$scope.description = entity.data.sections.description.data
entity.getUrl entity.data.mutationsUrl, {limit: 10}, (err, mutationsData) ->
if ! err?
for m in mutationsData.data
m.selected = true
$scope.mutations = mutationsData
entity.getUrl entity.data.frequenciesUrl, {}, (err, frequenciesData) ->
if ! err?
$scope.frequencies = frequenciesData
entity.getUrl entity.data.annotationUrl, {}, (err, annotationData) ->
if ! err?
$scope.annotation = annotationData
(error) ->
console.log error
)
服務:基因
.factory 'Gene', Array '$resource', '$http', ($resource, $http) ->
Gene = $resource '/api/knowledge/genes/:gene', {},
query:
method: 'GET'
Gene.prototype.getUrl = (url, options, callback) ->
$http {method: 'GET', url: url, params: options}
.then (res) -> # Success callback
callback null, res.data
,(res) -> # Error callback
callback res.status, res.data
Gene
我遇到的問題是由Gene.pr促進的「輔助」GET請求ototype.getUrl方法。我認爲該方法本身工作正常,因爲正確的內容(來自突變,頻率和註釋)正顯示在網頁上。然而,這些GET請求失敗,我從摩卡得到以下錯誤:「未定義不是一個對象(評估'mutationsData.data')」。
我嘲笑這些GET請求的反應無濟於事。這是我對控制器的測試。
測試
...
describe 'GeneController',() ->
Gene = undefined
beforeEach inject (_$controller_, $rootScope, _Gene_, _$httpBackend_) ->
scope = $rootScope.$new()
controller = _$controller_ 'GeneController', {
$scope: scope
$routeParams: { gene: 'param1' }
}
Gene: _Gene_
$httpBackend = _$httpBackend_
describe 'valid response',() ->
beforeEach() ->
$httpBackend.whenGET 'http://localhost:3000/api/knowledge/genes/param1/mutations'
.respond(200, JSON.stringify({
data: "something"
}))
$httpBackend.whenGET 'http://localhost:3000/api/knowledge/genes/param1/frequencies'
.respond(200, JSON.stringify({
data: 'somethingelse'
}))
$httpBackend.whenGET 'http://localhost:3000/api/kowledge/gene/param1/annotation'
.respond(200, JSON.stringify({
data: 'somethingelser'
}))
$httpBackend.expectGET '/api/knowledge/genes/param1'
.respond(200, JSON.stringify({
data: {
mutationsUrl: 'http://localhost:3000/api/knowledge/genes/param1/mutations',
frequenciesUrl: 'http://localhost:3000/api/knowledge/genes/param1/frequencies',
annotationUrl: 'http://localhost:3000/api/knowledge/genes/param1/annotation',
sections: {
description: {
data: 'holder'
}
}
}
}))
$httpBackend.flush()
it "should set $scope.description when the Gene is called",() ->
expect(scope.description).to.equal "holder"
這個問題的任何幫助將是非常讚賞。我完全陷入了這個問題。預先感謝您:)