我有一个工厂,它使用Angular资源进行API调用。然后我创建了一个名为getObjectById的函数,并使用工厂查询该对象,然后在返回之前修改该对象。
服务
return getObjectById: function(id) {
return objectFactory.getById({ id: id }).$promise.then(function(response) {
return modifyObject(response.object);
});
}
我想测试一下modifyObject()是否正常工作但是modifyObject是一个私有函数。
因此,为了测试它,我试图模拟对象,响应对象工厂正在与间谍一起返回。
测试
beforeEach(function() {
inject(function(objectFactory, $q) {
spyOn(objectFactory, 'getById').and.returnValue({ $promise: $q.when(readJSON('test/resources/object.json'))});
});
});
但每次我运行测试时都会收到错误:
TypeError:无法读取属性" returnValue'未定义的
如果我可以获得任何帮助,让它变得更好。甚至建议如果我做错了布局。使用最新版本的Jasmine
答案 0 :(得分:1)
这是一个很晚的答案,但是我在AngularJS / Angular混合应用程序中遇到了同样的问题。我们使用的是jasmine v1,但输入的是jasmine v2。这意味着TypeScript不会使用v1语法进行编译,但是会以TypeError: Cannot read property 'returnValue' of undefined
失败。
茉莉花版本需要与输入内容匹配:
"karma-jasmine": "0.1"
表示茉莉v1,需要"@types/jasmine": "^1.3.0"
"karma-jasmine": "0.3"
将是茉莉v2,并且需要"@types/jasmine": "2.8"
答案 1 :(得分:0)
您错过了结束括号
TRANSLATION_UNIT sample.cpp
+--NAMESPACE outer
+--NAMESPACE inner
+--CLASS_DECL MyClass
| +--CXX_ACCESS_SPEC_DECL
| +--CXX_METHOD myMethod
| | +--COMPOUND_STMT
| | +--RETURN_STMT
| | +--UNEXPOSED_EXPR ntohs
| | +--CALL_EXPR ntohs
| | +--UNEXPOSED_EXPR ntohs
| | | +--DECL_REF_EXPR ntohs
| | +--UNEXPOSED_EXPR
| | +--INTEGER_LITERAL
| +--CXX_METHOD anotherMethod
+--CXX_METHOD anotherMethod
| +--TYPE_REF class outer::inner::MyClass
| +--COMPOUND_STMT
| +--RETURN_STMT
| +--UNEXPOSED_EXPR ntohs
| +--CALL_EXPR ntohs
| +--UNEXPOSED_EXPR ntohs
| | +--DECL_REF_EXPR ntohs
| +--UNEXPOSED_EXPR
| +--INTEGER_LITERAL
+--FUNCTION_DECL myFunction
+--COMPOUND_STMT
+--RETURN_STMT
+--UNEXPOSED_EXPR ntohs
+--CALL_EXPR ntohs
+--UNEXPOSED_EXPR ntohs
| +--DECL_REF_EXPR ntohs
+--UNEXPOSED_EXPR
+--INTEGER_LITERAL