2014-03-18 149 views
3

我正在通过一些在线的AngularJS实例来了解它是如何工作的。我试图用茉莉花来测试,就像在例子中一样。在我的spec文件,我有:

var Person = function (name, $log) { 
    this.eat = function (food) { 
     $log.info(name + " is eating delicious " + food); 
    }; 
    this.beHungry = function (reason) { 
     $log.warn(name + " hungry " + reason); 
    }; 
}; 

var bob = new Person(); 

describe("describe", function() { 
    it("$q", function() { 
     var pizzaOrderFulfillment = $q.defer(); 
     var pizzaDelivered = pizzaOrderFulfillment.promise; 

     pizzaDelivered.then(bob.eat, bob.beHungry); 

     pizzaOrderFulfillment.resolve("resolved"); 
     $rootScope.$digest(); 

     expect($log.TypeInfo.logs).toContain(["resolved"]); 
    }); 
}); 

我我正确使用茉莉花得到

ReferenceError: $q is not defined

?我基本上只是在spec.js文件中编写我所有的angular和jasmine代码。当我在另一个文件中使用角码时,我的spec.js文件找不到它。可能是因为我没有设置任何依赖关系,因为我刚刚开始使用这些东西。

编辑,将$固定为$ q和referencerror。

+0

你不想'$ q.defer()',而不是'$ .defer()'? – Jonathan

+0

@Jonathan啊是的,但我仍然有错误,$ q没有定义。 – Crystal

回答

4

我想你不是在你的单元测试中注入$q服务。

例如在beforeEach块,你可以把它注射:

var q; 
beforeEach(inject(function($q) { 
    q = $q; 
})); 

,然后在单元测试:

describe("describe", function() { 
    it("$q", function() { 
     var pizzaOrderFulfillment = q.defer(); 
     var pizzaDelivered = pizzaOrderFulfillment.promise; 

     pizzaDelivered.then(bob.eat, bob.beHungry); 

     pizzaOrderFulfillment.resolve("resolved"); 
     $rootScope.$digest(); 

     expect($log.TypeInfo.logs).toContain(["resolved"]); 
    }); 
}); 
+0

您为什么需要注入$ q服务而不是$ log? – Crystal

+0

也许你已经注射了它?我不知道文件其余部分的内容。 –

+0

我复制并粘贴的是整个文件。如果我必须注入任何东西,我不知道。刚开始时,我正在阅读的书并没有列出所有的代码。只是片段,所以我复制并粘贴了片段。 – Crystal