0

Meteor.collection.insert()は引数として受け入れcallbackます。例として、まったく新しい Meteor プロジェクトを作成し、ブラウザのコンソールで次のコードを実行できます。

my_collection = new Meteor.Collection("myCollection");
my_collection.insert(
    {some: "object"},
    function() {
        console.log("finished insertion");
    })

この同じコードを Laika テストに入れると、callback引数が呼び出されません。ここに私のテストコードがあります:

suite('testing Laika out', function() {
    test('inserting into collection', function(done, server, client) {
        client.eval(function() {
            my_collection = new Meteor.Collection("myCollection");
            my_collection.insert(
                {some: "object"},
                function() {
                    console.log("finished insertion");
                    done();
                })
        })
    })
})

この Laika テストでコールバック関数が呼び出されない理由を知っている人はいますか? これは、 以外の問題のようですMeteor.collection.insert()

(Ubuntu 13.04、Meteor 0.7.0.1、Laika 0.3.1、PhantomJS 1.9.2-6 を実行しています)

4

2 に答える 2

0

jonS90 さん、--verboseフラグを付けて Laika を実行すると、例外が静かにスローされていることに気付くでしょう。

[client log] Exception in delivering result of invoking '/myCollection/insert': ReferenceError: Can't find variable: done

done()ご覧のとおり、そのコンテキストではアクセスできません。コードを修正する方法は次のとおりです。

test('inserting into collection', function(done, server, client) {
    client.eval(function() {
        my_collection = new Meteor.Collection("myCollection");

        finishedInsertion = function () {
            console.log("finished insertion");
            emit('done')
        }
        my_collection.insert(
            {some: "object"},
            finishedInsertion)
    })
    client.once('done', function() {
        done();
    })
})
于 2014-01-03T18:50:51.830 に答える