我正在使用茉莉花和业力测试我的角度应用程序。我的服务如下
app.service('demo1', function( $http ){
this.send = function(){
return $http({
url: 'someurl'
});
}
});
使用ngMockE2E
嘲笑回复。
我的茉莉花规格如下:
describe('Testing asynchronus', function(){
var demoService;
beforeEach(function(){
module('app');
inject(function( demo1 ){
demoService = demo1
});
});
it('Should be able to test promise', function(){
demoService.send().then(function( data ){
expect(data.status).toBe(true);
});
});
});
现在的问题是,expect
没有执行。无论data.status
的值是多少,每次都会通过测试。我需要有关如何测试这些场景的帮助?提前谢谢。
真实代码:
describe("Testing MetaService", function(){
var _entityMeta_, metaService, scope;
beforeEach(function(){
console.log( '---------------------- Starting Meta Service fetchEntityMeta Test ---------------------------' );
module(APP_MODULE_NAME);
inject(function(_entityMeta_, _metaService_, $rootScope){
metaService = _metaService_;
entityMeta = _entityMeta_;
scope = $rootScope.$new();
});
});
afterEach(function(){
console.log( '---------------------- Ending Meta Service fetchEntityMeta Test ---------------------------' );
});
// Giving mock data from entityMeta.person as input
it("Should have a valid structure", function($rootScope){
console.log( '////////////////////////////////////////////' );
metaService.fetchEntityMeta('person').then(function( data ){
console.log( data );
expect(data.type).toBe('object');
expect(data.properties.length).toBeGreaterThan(0);
expect(data.definitions.length).toBeGreaterThan(0);
});
});
});
我收到以下错误:
Error: Timeout - Async callback was not invoked within timeout specified
by jasmine.DEFAULT_TIMEOUT_INTERVAL.
答案 0 :(得分:1)
尝试添加
beforeEach(module('app'));
下的描述
答案 1 :(得分:0)
如果您正在使用Jasmine 2,则传递给it
的回调参数应该是测试结束时调用的done
函数。 (如果从未调用测试运行器将超时。)
(请参阅the official doc here或one of many blog posts。)
我真的不明白为什么在这种情况下传递$rootScope
,但错误消息看起来像是抱怨,因为done
函数(碰巧名为$rootScope
这里没有被称为。
这可能有效:
// Giving mock data from entityMeta.person as input
it("Should have a valid structure", function(done){
console.log( '////////////////////////////////////////////' );
metaService.fetchEntityMeta('person').then(function( data ){
console.log( data );
expect(data.type).toBe('object');
expect(data.properties.length).toBeGreaterThan(0);
expect(data.definitions.length).toBeGreaterThan(0);
done();
}, function (e) {
// The promise was not resolved, this is most likely an
// implementation error. Let's fail the test !
throw new Error(e);
});
});
如果永远不会调用then
部分,done
功能也不会,您现在就会看到超时错误。