我正在使用茉莉花来测试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');
});
});
});
答案 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');