茉莉花,$q未定义。

3

我正在学习AngularJS,并尝试通过网上的一些示例了解其工作原理。我想要像示例中那样使用Jasmine进行测试。在我的规范文件中,我有:

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文件中编写我的所有angular和jasmine代码。当我将angular代码放在另一个文件中时,我的spec.js文件找不到它。可能是因为我没有设置任何依赖关系来确定哪些内容应该首先加载,因为我刚刚开始接触这些东西。

编辑后,将$更正为$q,解决了引用错误。


дҪ дёҚжғіз”Ё$q.defer()д»Јжӣҝ$.defer()еҗ—пјҹ - Jonathan
@Jonathan 哦,是的,但我仍然得到一个错误,$q未定义。 - Crystal
1个回答

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"]);
    });
});

为什么你需要注入$q服务而不是$log? - Crystal
也许你已经注入了它?我不知道你文件的其余内容。 - Mimo
我复制和粘贴的是整个文件。如果需要注入任何内容,我不知道该怎么做。我刚开始学习,我正在阅读的书没有列出所有的代码,只有片段,所以我复制并粘贴了这些片段。 - Crystal
如果你正在阅读《精通AngularJS Web应用开发》,你应该有一个链接可以下载所有代码示例。 - Mimo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接