1

簡単なテスト (mocha と should) を設定し、保存したレポートが取得したレポートと同じであることをテストしています。私は deep.equal を使用したいと思いますが、_id が等しくないため、行き詰まります。

var report = new Report();

        describe('GET:id /api/reports', function () {

        beforeEach(function (done) {
            report.save(function (err, result) {
                if (err) return (done(err));
                result._id.should.eql(report._id);
                done();
            });
        });

        afterEach(function (done) {
            Report.remove().exec().then(function () {
                done();
            });
        });

        before(function (done) {
            Report.remove().exec().then(function () {
                done();
            });
        });


        it('should respond with the same report saved', function (done) {
            request(app)
                .get('/api/reports/' + report._id)
                .expect(200)
                .expect('Content-Type', /json/)
                .end(function (err, res) {
                    if (err) return done(err);
                    console.log(JSON.stringify(res.body));
                    console.log(JSON.stringify(report));
                    res.body._id.should.equal(report._id);

                    done();
                });
        });
    });

私が得る出力は

    {"_id":"55282d42cb39c43c0e4421e1","__v":0}
{"__v":0,"_id":"55282d42cb39c43c0e4421e1"}

1) GET:id /api/reports should respond with the same report saved:
     Uncaught AssertionError: expected '55282d42cb39c43c0e4421e1' to be 55282d42cb39c43c0e4421e1

代わりに == を使用すると、正常に動作します

(res.body._id == report._id).should.equal(true);

私が最終的に望んでいたのは、res.body(またはそのことについては他の何か)が最初のレポートと完全に一致することでした。

4

1 に答える 1

2

を送信する/api/reports/:idためのExpress ルート ハンドラーであると仮定すると、問題は mongoose ドキュメントが「文字列化」されていることです。マングース ドキュメントが文字列化されると、ObjectId は文字列に型キャストされます。これは、解析してオブジェクトに戻るときに ObjectId に自動的に変換されません。res.json()Report

そのため、元のドキュメントを Express から返されたドキュメントと「完全に等しく」したい場合はReport、それを同じ「変換プロセス」に送信する必要があります。アサーションは次のようになります。

res.body.should.eql(JSON.parse(JSON.stringify(report)));

これがうまくいくことを願っています。

于 2015-04-13T01:36:09.717 に答える