使用Jasmine,如何测试异步调用的返回值?

时间:2014-12-14 08:55:43

标签: asynchronous redis jasmine

我正在使用茉莉花来测试redis的功能。由于redis API都是异步调用,我不知道如何使用jasmine expect().toBe()测试结果。我总是看到错误:

            throw err;
                  ^
TypeError: Cannot call method 'expect' of null

这是我的测试代码:

var redis = require('redis');

describe("A suite for redis", function() {
    var db = null;

    beforeEach(function() {
        db = redis.createClient();
        // if you'd like to select database 3, instead of 0 (default), call
        // db.select(3, function() { /* ... */ });
        db.on("error", function (err) {
            console.log("Error " + err);
        });
    });

    afterEach(function() {
        db.quit();
    });

    it('test string', function(){
        db.set('str_key1', 'hello', redis.print);
        db.get('str_key1', function(err,ret){
            expect(ret).toBe('hello');
        });
    });
});

2 个答案:

答案 0 :(得分:1)

对于同步调用,可以使用Jasmine异步功能,将done()传递给beforeEach()it(),请参阅: http://jasmine.github.io/2.0/introduction.html#section-Asynchronous_Support

因此,您的代码可以更改为:

var redis = require('redis');

describe("A suite for redis", function() {
    var db = null;

    beforeEach(function(done) {
        db = redis.createClient();
        // if you'd like to select database 3, instead of 0 (default), call
        // db.select(3, function() { /* ... */ });
        db.on("error", function (err) {
            console.log("Error " + err);
        });
        done();
    });

    afterEach(function(done) {
        db.quit();
        done();
    });

    it('test string', function(done){
        db.set('str_key1', 'hello', redis.print);
        db.get('str_key1', function(err,ret){
            expect(ret).toBe('hello');
            done(); // put done() after expect(), or else expect() may report error
        });
    });
});

答案 1 :(得分:0)

expect(val).toBe('hello');

我没有看到" val"在上面的代码中定义,您可能需要检查" ret"。

expect(ret).toBe('hello');