2012-11-08 6 views
5

casper.jsの機能テストには少し問題があります。安心なAPIを使用したCasper JS waitForResource

私たちは同じリソースをGETで2回、次にPOSTメソッドで2回要求します。 2番目のリソース(POST)を待つとき、最初のリソースと一致し、直接「then」機能に進みます。

私たちはリソースを適切に識別できるように、「テスト」機能でHTTPメソッドをチェックできるようにしたいと考えています。今はステータスコード(res.status)を使用していますが、それは私たちの問題を完全に解決するわけではありません。本当にhttpメソッドが必要です。

// create new email 
this.click(xPath('//div[@id="tab-content"]//a[@class="button create"]')); 

// GET 
this.waitForResource('/some/resource', 
    function then() { 
     this.test.assertExists(xPath('//form[@id="email_edit_form"]'), 'Email edit form is there'); 

     this.fill('form#email_edit_form', { 
      'email_entity[email]': '[email protected]', 
      'email_entity[isMain]': 1 
     }, true); 

     // POST 
     this.waitForResource(
      function test(res) { 
       return res.url.search('/some/resource') !== -1 && res.status === 201; 
      }, 
      function then() { 
       this.test.assert(true, 'Email creation worked.'); 
      }, 
      function timeout() { 
       this.test.fail('Email creation did not work.'); 
      } 
     ); 
    }, 
    function timeout() { 
     this.test.fail('Email adress creation form has not been loaded'); 
    }); 

このシナリオをテストするには、より良い方法がありますか?これは機能テストなので、すべてのステップを1つのテストで保つ必要があります。

答えて

1

test関数に渡されるresパラメータにはIDがあります。私はこのIDに対してテストを行い、それをブラックリストに載せるヘルパーを作ったので、同じリソースはもう一度受け入れられません。

1

フォームアクションURLを変更してクエリ文字列を追加しようとすると、スタックに追加された新しいリソースが生成されます。このようにすることができます:

casper.thenEvaluate(function() { 
    var form = __utils__.findOne('#email_edit_form'); 
    form.setAttribute('action', form.getAttribute('action') + '?plop'); 
}); 

これはハックですが、機能テストは決してそのようにするべきではありません。今後さらに多くの情報がレスポンスオブジェクトに追加されることを願っています。

関連する問題