यह update फ़ंक्शन है जिसे मैं नकली डेटाबेस में परीक्षण करना चाहता हूं

import Book from '../model/book';

function bookRepository(db) {
    this.db = db;
};

bookRepository.prototype.update = async function(id, data) {
    return await Book.findOneAndUpdate({ _id: id }, { $set: data });
}

export default bookRepository;

यह परीक्षण स्क्रिप्ट है जो मैंने इसके लिए लिखी थी

import chai from 'chai';
import chaiAsPromised from 'chai-as-promised';
chai.use(chaiAsPromised);
const expect = chai.expect;

import app from '../../server';
import bookRepo from '../../repository/book';
const Book = new bookRepo(app.db);

describe('Test repository: book', () => {

    describe('update', () => {
        let id;
        beforeEach(async() => {
            let book = {
                name: 'Records of the Three Kingdoms',
                type: 'novel',
                description: 'History of the late Eastern Han dynasty (c. 184–220 AD) and the Three Kingdoms period (220–280 AD)',
                author: 'Luo Guanzhong',
                language: 'Chinese'
            };
            let result = await Book.insert(book);
            id = await result.id;
            return;
        });
        it('Update successfully', async() => {
            let data = {
                type: 'history',
                author: 'Chen Shou'
            };
            let result = await Book.update(id, data);
            await expect(result).to.be.an('object');
            await expect(result.type).to.be.equal('history');
            return expect(result.author).to.be.equal('Chen Shou');
        });
    });

});

और मुझे यह त्रुटि मिली

AssertionError: expected 'novel' to equal 'history'
      + expected - actual

जब मैं नकली डेटाबेस की जांच करता हूं, तो यह डेटा अपडेट करता है, लेकिन इसका दावा विफल क्यों होता है? await कॉल . को पूरा करने के बाद इसे पहले ही अपडेट हो जाना चाहिए था

0
necroface 13 मार्च 2017, 10:07
console.log(result) आपको क्या देता है?
 – 
lonesomeday
13 मार्च 2017, 11:11
book के साथ बिल्कुल वैसा ही जैसे कि इसे अपडेट नहीं किया गया हो
 – 
necroface
13 मार्च 2017, 11:31

1 उत्तर

सबसे बढ़िया उत्तर

findOneAndUpdate विधि तीसरे तर्क के रूप में options लेती है। विकल्पों में से एक returnNewDocument: <boolean> है। यह डिफ़ॉल्ट रूप से false है। यदि आप इस विकल्प को true के रूप में सेट नहीं करते हैं तो MongoDB दस्तावेज़ को अपडेट करता है और परिणामस्वरूप पुराने दस्तावेज़ को वापस कर देता है। यदि आप इस विकल्प को true पर सेट करते हैं तो MongoDB नया अद्यतन दस्तावेज़ लौटाता है।

आधिकारिक डॉक्स से -

या तो मूल दस्तावेज़ लौटाता है या, यदि रिटर्न न्यू डॉक्यूमेंट: सही है, तो अपडेट किया गया दस्तावेज़।

तो अपनी अद्यतन विधि में, निम्न परिवर्तन करें -

return await Book.findOneAndUpdate({ _id: id }, { $set: data }, { returnNewDocument : true });

आप इसके बारे में यहां पढ़ सकते हैं।

संपादित करें - यदि mongoose का उपयोग कर रहे हैं तो उपरोक्त विकल्प के बजाय {new: true} विकल्प का उपयोग करें क्योंकि mongoose findOneAndUpdate के नीचे findAndModify का उपयोग करता है। तरीका।

2
Jyotman Singh 13 मार्च 2017, 12:46
आपका बहुत-बहुत धन्यवाद। आपके उत्तर में थोड़ा सा संशोधन, सही विकल्प है: { new: true}
 – 
necroface
13 मार्च 2017, 12:26
मुझे लगता है कि आप mongoose का उपयोग कर रहे हैं। मैंने जो दस्तावेज प्रदान किया है वह मूल मोंगोडीबी ड्राइवर के लिए है :) मैं उत्तर में इसका उल्लेख करूंगा।
 – 
Jyotman Singh
13 मार्च 2017, 12:44