茉莉,$ q未定义

时间:2014-03-18 22:37:50

标签: javascript angularjs jasmine karma-runner

我在线浏览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未定义

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

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

1 个答案:

答案 0 :(得分: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"]);
    });
});