オプションの属性を持つディレクティブがあります。属性が存在しない場合は、デフォルト値が提供されます。属性は通常、スコープ内のデータから設定されます (つまり、属性の値は通常、リテラル文字列ではなく式です。http://jsfiddle.net/8PGZ4/を参照してください)。
そのattrs.$observe
ため、スコープを適切に設定するためにディレクティブで使用しています。これは、アプリ自体でうまく機能します。ただし、これを (Jasmine を使用して) テストしようとすると、 の関数$observe
が実行されません。テストは次のようになります。
describe("myDirective", function(){
function getDirectiveScope(compile, rootScope, directiveHTML)
{
return (compile(directiveHTML)(rootScope)).scope();
}
describe("foo", function () {
it("should return the default value", inject(function ($compile, $rootScope) {
var directiveScope = getDirectiveScope($compile, $rootScope, '<div my-directive></div>');
expect(directiveScope.bar).toBe("No Value");
}));
it("should now return the value given", inject(function ($compile, $rootScope) {
$rootScope.foo = "asdf";
var directiveScope = getDirectiveScope($compile, $rootScope, '<div my-directive foo="{{foo}}"></div>');
expect(directiveScope.bar).toBe("asdf");
}));
});
});
これらは、次のエラーで失敗します。
Expected undefined to be 'No Value'.
Expected undefined to be 'asdf'.
関数にconsole.log を入れて、$observe
何が起こっているのかを確認しようとしましたが、テストを実行してもログは表示されません。を実行するために必要な明示的な呼び出しはあり$observe
ますか? ここで何か他のことが起こっていますか?