kikukawa's diary

都内で活動するシステムエンジニアが書いてます。 興味を持った技術やハマったポイント、自分用メモをつけてます。 最近はweb中心

Protractorのbindingロケーターではまり

by.bindingを使用していてハマりました。 こんなエラーメッセージです。

   Message:
     TypeError: Invalid locator
   Stacktrace:
     TypeError: Invalid locator
==== async task ====
Protractor.waitForAngular()
==== async task ====

ProtractorかつJasmineでテストを書く際、
下記のように、promiseを意識せずに書くことができます。
ProtractorがJasmineの拡張をしているかららしいです。

expect(element(by.binding('foo')).getText()).toBe('foo-bar');

ただし、これは、view側下記のような書き方のときだけです。

<span ng-bind="foo"></span>

view側が下記のような、波括弧を使った書き方だと、promiseの解決ができないようです。

<span>{{foo}}</span>

そんな時は、下記のような書き方でテストを書きます。

element(by.binding('foo')).getText().then(function(val) {
  expect(val).toBe('foo-bar');
});

参考

http://angular.github.io/protractor/#/api?view=ElementFinder