這個問題可能有點令我困惑,但我會盡力讓自己清楚。訪問外部回調函數的這個對象
基本上我正在爲我的Node.JS服務器的數據訪問層做mocha/chai單元測試。我正在使用bluebird來返回一個promise和一個SQLite數據庫。
這是我的功能插入我想測試:
insert(sqlRequest, sqlParams, sqlRequest2) {
return new Promise(function (resolve, reject) {
let insertStatement = this.getDatabase().prepare(sqlRequest);
let getStatement = this.getDatabase().prepare(sqlRequest2);
insertStatement.run(sqlParams, err => {
console.log('this.changes = ', this.changes);
if (this.changes === 1) {
getStatement.all({ $id: this.lastID }, (err, rows) => {
if (err) {
console.log('entered second err');
reject(err);
} else {
resolve(rows[0]);
}
});
} else {
console.log('entered first err ');
reject(err);
}
});
}.bind(this));
}
這就是我的測試與摩卡咖啡:
it('insert : Error 2st SQL query', function (done) {
const daoCommon = new DaoCommon();
daoCommon.getDatabase =() => {
return {
prepare: (sqlRequest) => {
return {
all: (sql, callback) => {
let err = {};
let rows = null;
callback(err, rows);
},
run: (sqlParams, callback) => {
let err = undefined;
callback(err);
}
}
}
}
}
daoCommon.insert('', '', '')
.then(success => {
expect.fail();
})
.catch(error => {
expect(error).to.eql({});
})
.finally(function() {
done();
})
});
我想模擬測試,其中this.changes
等於1,但我不我不知道如何/在哪裏設置這個值。根據我讀過的這個this object
是來自回調函數,但我不知道它來自何處或如何爲我的測試設置它。
我想在我的測試中做到這一點,因爲我上面顯示的模擬變化情況= 1。在我的測試中,我沒有使用數據庫我創建我的對象來模擬案例,你可以看到在摩卡功能。 –
使用'.call()'調用函數'callback(err)'時,可以設置'this'。例如:'callback.call({changes:1},err)'。這會將「更改」設置爲「1」。 – Maxali
感謝主席,這正是我所尋找的,像魅力一樣工作。 –