2016-06-27 12 views
1

ストーリー:私たちは、手/ポインタカーソルを持っている要素を期待するカスタムのジャスミンマッチャを使用してきたカスタムジャスミンマッチャと約束

は:

beforeEach(function() { 
    jasmine.addMatchers({ 
     toHaveHandCursor: function() { 
      return { 
       compare: function(actual) { 
        return { 
         pass: actual.getCssValue("cursor").then(function(cursor) { 
          return cursor === "pointer"; 
         }) 
        }; 
       } 
      }; 
     }, 
    }); 
}); 

それは素晴らしい作品そしてテストは読みやすく:

expect(queuePage.sortByButton).toHaveHandCursor(); 

問題:

期待は失敗し、現在、我々は、フォームでのコンソール上の赤いテキストの完全に読めない巨大な塊を得る:

ElementFinder({ptor_期待
  • :分度器({getProcessedConfig:機能、forkNewDriverInstance :Function、restart:Function、 controlFlow:関数、スケジュール:Function、setFileDetector:Function、 getSession:Function、getCapabilities:Function、終了:関数、 actions:function、touchActions:Function、executeScript:Function、 executeAsyncScript:Function 、call:関数、待機:機能、スリープ: 機能、getWindowHandle:機能、getAllWindowHandles:機能、 getPageSource:機能、クローズ:機能、getCurrentUrl:機能、 のgetTitle:機能、findElementInternal_:機能、 findElementsInternal_ ...スクロールの10分の... 、クリックしてください: 機能、のSendKeys:機能、GETTAGNAME:機能、getCssValue: 機能、のgetAttribute:機能、のgetText:機能、のgetSize: 機能、のgetLocation:機能、ISENABLED:機能、isSelected: 機能、提出:機能、クリア:Function、isDisplayed:Function、 getOuterHtml:Function、getInnerHtml:Function、getId:Function、 getRawId:関数、シリアライズ:Function、takeScreenshot:Function}) は手のカーソルを持っています。

質問:なぜそれが起こっている

? 代わりに、マッチャーを改善して代わりにユーザーフレンドリーなエラーを出力できますか? のような何か:

Expected 'auto' to be equal to 'pointer' cursor value. 
私が理解から

、我々は独自の正規表現エンジンのmessage価値を提供する必要があるだろうが、私はに実際の要素のcursor CSS値を渡す方法を完全にわからないんだけどメッセージ。ここで私はこれまで持っているものです。

toHaveHandCursor: function() { 
    return { 
     compare: function(actual) { 
      return actual.getCssValue("cursor").then(function(cursor) { 
       return { 
        pass: cursor === "pointer", 
        message: "Expected '" + cursor + "' to be equal to 'pointer' cursor value." 
       }; 
      }); 
     } 
    }; 
}, 

私はいくつかの理由で、私はテストの実行後にコンソール上で同じエラーメッセージが表示され、これが動作することを期待しますが、。

答えて

3

自動生成ジャスミンマッチャはElementFinderインスタンスの文字列表現から成ってメッセージに失敗しました。

ここで、失敗メッセージを改善するには、messageキーとpassの両方を使用する必要があります。我々が得る、期待が失敗した場合、今

toHaveHandCursor: function() { 
    return { 
     compare: function(actual) { 
      var result = {}; 

      result.pass = actual.getCssValue("cursor").then(function(cursor) { 
       result.message = "Expected '" + cursor + "' to be equal to 'pointer' cursor value."; 
       return cursor === "pointer"; 
      }); 

      return result; 
     } 
    }; 
}, 

:我々は、しかしgetCssValue()すると約束を返し、それがカスタムエラーメッセージで使用される実際のcursor値のために解決する必要があることを考慮に入れる必要がありますいいえエラーメッセージ:

- Expected 'auto' to be equal to 'pointer' cursor value. 
2

正しいメッセージを設定するには、返されたオブジェクトのmessage属性を設定する必要があります。

メッセージは単なる通常の文字列です。約束が満たされた後に結果オブジェクトをまとめると、変数cursorの値を使用することができます。

beforeEach(function(){ 
    jasmine.addMatchers({ 
    toBeDeactivated: function() { 
     return { 
     compare: function(account){ 
      var accountStatusCode = account.get('status').statusCode; 
      var result = { pass: accountStatusCode === 5 }; 
      if(result.pass) { 
      result.message = "Expected account with status code '" + accountStatusCode + " NOT to be deactivated."; 
      } else { 
      result.message = "Expected account with status code '" + accountStatusCode + "' to be deactivated."; 
      } 
      return result; 
     } 
     } 
    } 
    } 
}); 

Source

は簡単であるべき約束でaccount.get()の交換:

は、それが行うことができる方法を次の例を参照してください。何らかの理由で、非常に巨大な、それが表示されている - 私たちは、コンソールになっていた何

+0

私は約束でそれを使用することに問題がありますが、音は正しいです。これまで私が持っていたもので質問を更新しました。ありがとう! – alecxe

+0

別の回答として掲載されました。助けてくれてありがとう。 – alecxe