17

私は CasperJS を初めて使用し、テスト スイートの作成を開始しました。一部の手順 (アプリケーションへのログインなど) は再利用が多いため、ライブラリ ファイル (テスト ファイルに含まれています) で管理したいと考えています。

さらに、複数の環境 (開発、統合、本番など) を実行しているため、このためのテスト手順をパラメーター化する必要があるため、モジュールにパラメーターを渡すことが可能になります。

ドキュメントとスタックオーバーフローを検索しました (同様の質問があることは承知しています) が、私の Javascript スキルは明らかに限定的であり、これを起動して実行することができませんでした。

これは私のテストファイルの例です:

// googletesting.js
casper.test.begin('Google search retrieves 10 or more results', 5, function suite(test) {
    casper.start("http://www.google.fr/", function() {
        test.assertTitle("Google", "google homepage title is the one expected");
        test.assertExists('form[action="/search"]', "main form is found");
        this.fill('form[action="/search"]', {
            q: "casperjs"
        }, true);
    });

    casper.then(function() {
        test.assertTitle("casperjs - Recherche Google", "google title is ok");
        test.assertUrlMatch(/q=casperjs/, "search term has been submitted");
        test.assertEval(function() {
            return __utils__.findAll("h3.r").length >= 10;
        }, "google search for \"casperjs\" retrieves 10 or more results");
    });

    casper.run(function() {
        test.done();
    });
}); 

そして、これはどのように(または同様に)あるべきかです:

// googletesting2.js
casper.test.begin('Google search retrieves 10 or more results', 5, function suite(test) {

    doGoogleSearch('casperjs'); // pass a search term
    doChecks();

    casper.run(function() {
        test.done();
    });
}); 
4

2 に答える 2

2

同じコードを関数に入れるだけです。関数に渡す方法はいくつかありますtest。最も簡単な方法は、パラメーターとして渡すことです。

casper.test.begin('Google search retrieves 10 or more results', 5, function suite(test) {

    doGoogleSearch(test, 'casperjs'); // pass a search term
    doChecks(test);        

    casper.run(function() {
        test.done();
    });
}); 

function doGoogleSearch (test, q) {
    test.assertTitle("Google", "google homepage title is the one expected");
    test.assertExists('form[action="/search"]', "main form is found");
    this.fill('form[action="/search"]', {
        q: q
    }, true);

}

function doChecks (test) {
    test.assertTitle("casperjs - Recherche Google", "google title is ok");
    test.assertUrlMatch(/q=casperjs/, "search term has been submitted");
    test.assertEval(function() {
        return __utils__.findAll("h3.r").length >= 10;
    }, "google search for \"casperjs\" retrieves 10 or more results");
}

繰り返しますが、これら 2 つの関数を function のスコープ内に配置suiteすると、これらの関数は自動的に へのアクセスを取得しますtest

他の方法は、それをwindow.test = test;内部として設定し、グローバルに利用できるようにすることですsuite. testすべての機能がアクセスできます。

于 2013-09-16T08:10:41.817 に答える