我有一个工厂,正在尝试对其进行单元测试,并注入了PouchDB包装器。我遇到的问题是我让模拟的PouchDB服务返回了一个承诺,并且在承诺得到解决(我可以console.log退出successCb且看起来正确)的同时,业力期望successCb函数中的语句位于正确的控制台上。日志输出正在运行。

我不知道为什么console.log输出能正常工作,但是期望语句不能执行,对此问题的任何帮助将不胜感激!

以下是相关的代码片段:

[单元测试设置]

var mockCalendarsResource, mockPouchDB;
var mockPouchDB = function(name) {
    this.name = name;
    this.post = function(newCalendar, successCb, errorCb) {
        var promise = new Promise(function(successCb, errorCb) {
            newCalendar._id = 2;
            successCb(newCalendar);
        });
        return promise;
    };
}

beforeEach(function() {
    module(function($provide) {
        $provide.value('Pouch', mockPouchDB);
    });
    angular.mock.inject(function($injector) {
        mockCalendarsResource = $injector.get('Calendar');
    });
});


[业力单元测试代码]

describe('The calendar resource function create', function() {
    it('should create a new calendar', inject(function(Calendar) {
        var result = mockCalendarsResource.create({
            name: "Testing"
        },
        function(response) {
            //console.log here works correctly //
            //These are the expect statements not functioning //
            expect(response._id).toBe(2);
            expect(response.name).toBe('Testing');
            // Could put any expectation here and it will pass or not be checked //
        }, function(err) {

        });
    }));
});

最佳答案

我相信您应该使用Jasmine 2.0's done()表示测试已完成。如果您不这样做,那么异步测试将不会完成。

关于javascript - 使用PouchDB服务 promise 进行AngularJS单元测试,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23136661/

10-16 19:24
查看更多