我正在测试一个 angularjs 控制器,也使用模拟,但它会引发错误“错误:Unsatisfied requests: POST /myurl
我的测试文件包含这样的 beforeEach 方法
httpBackend.whenPOST('/myurl')
.respond( 200,obj1 );
httpBackend.expectPOST('/myurl')
scope = $rootScope.$new();
MainCtrl = $controller('MyCtrl', {
$scope:scope
});
我的测试用例是:
it('scope.mymethod should work fine', function(){
httpBackend.flush()
// verify size of array before calling the method
expect(scope.myobjs.length).toEqual(2)
// call the method
scope.saveNewPage(myobj)
// verify size of array after calling the method
expect(scope.myobjs.length).toEqual(3)
})
该方法saveNewPage
如下所示:
function saveNewPage(p){
console.log('Hello')
$http.post('/myurl', {
e:p.e, url:p.url, name:p.name
}).then(function (response) {
otherMethod(new Page(response.data.page))
}, handleError);
}
请注意,console.log('Hello')
它永远不会被执行(在业力控制台中它永远不会被打印)。
编辑:与此同时,我正在研究有关 httpBackend 的文档,我试图改变 httpBackend.flush() 的位置。基本上,我正在执行第一个flush(),以初始化范围内的数据,然后我执行该方法,然后我为挂起的请求执行另一个flush()。具体来说,在这种情况下,测试用例如下所示:
it('scope.saveNewPage should work fine', function(){
var p=new Object(pages[0])
httpBackend.flush()
httpBackend.whenPOST('/myurl',{
url:pages[0].url,
existingPage:new Object(pages[0]),
name:pages[0].name
}).respond(200,{data:pages[0]})
httpBackend.expectPOST('/myurl')
scope.saveNewPage(p)
httpBackend.flush()
expect(scope.pages.length).toBe(3)
})
但是现在它提出了Error: No response defined !
,就像我没有为那个 url 指定模拟一样