0

私はrendr(クライアントとサーバーのバックボーン)を使用してWebアプリケーションを作成し、単体テストを実装しようとしています。

モカでコレクションフェッチユニットテストを実行する方法はありますか? mocha で ajax リクエストをモックするために sinon-chai を使用したいと考えています。しかし、この方法で $ "ajax" をスタブしようとするとエラーが発生し、

var chai = require("chai");
var rekuire = require("rekuire");
var sinon = require("sinon");
var $ = require("jquery"); //because this is node-jquery, we don't have ajax function.
chai.use(require("sinon-chai"));

require("chai").should();
require("mocha-sinon");

var Books = rekuire("app/collections/books");

describe("Books interaction with REST API", function() {
    it("should load using the API", function(){
        //TypeError: Cannot stub non-existent own property ajax
        this.ajax_stub = this.sinon.stub($, "ajax").yieldsTo("success", [
            {
                count: 20,
                "books": [
                    {
                        title: "Google1",
                        author: ["author1", "author2"]
                    },
                    {
                        title: "Google2",
                        author: ["author3", "author4"]
                    }
                ]
            }
        ]);
        this.books = Books.fetch();
        this.books.should.have.length(2);
        this.ajax_stub.restore();
    });
}); 

私の質問は、モカで単体テストを実行するときに $.ajax 関数をスタブする方法はありますか?

4

1 に答える 1

1

レンダリングの場合:

テストにはいくつかの問題があります。モデル/コレクションのフェッチは、実際には $.ajax ではなく async.parallel を使用します。

.fetchまた、オーバーライドしない限り、特にテストすることはお勧めしません。この関数は、Rendr 自体の内部で既にテストされているため、このテストはあまり役に立ちません。collection.fetchオーバーライドしている場合は、関数をスタブ化して、代わりに yield することをお勧めします$

于 2015-06-25T23:00:56.790 に答える