Directivesのテスト
テストの目的 directiveがビュー/DOMで機能するかどうかをテストします.
DirectiveはAngularJSの重要な構成部分(実はカスタムコントロール)です.彼らをテストすることも重要です.directiveをテストするときは、directiveが実行されたときに$scopeまたはDOMに反応するかどうかを見たいはずです.directivesは同じように、設計に依存して、XHRをバックグラウンドにトリガーする可能性がありますが、これはあまりにもかわいいので、directivesをテストするときは、3つの方法で正確性を保証することが望ましいです(結局は汎用的なカスタムコントロールで、恥をかくことはできません).
ユニットテスト:
Midwayテスト:
E 2 Eテスト:
DirectiveはAngularJSの重要な構成部分(実はカスタムコントロール)です.彼らをテストすることも重要です.directiveをテストするときは、directiveが実行されたときに$scopeまたはDOMに反応するかどうかを見たいはずです.directivesは同じように、設計に依存して、XHRをバックグラウンドにトリガーする可能性がありますが、これはあまりにもかわいいので、directivesをテストするときは、3つの方法で正確性を保証することが望ましいです(結局は汎用的なカスタムコントロールで、恥をかくことはできません).
ユニットテスト:
<!-- lang: js -->
//
// test/unit/directives/directivesSpec.js
//
describe("Unit: Testing Directives", function() {
var $compile, $rootScope;
beforeEach(module('App'));
beforeEach(inject(
['$compile','$rootScope', function($c, $r) {
$compile = $c;
$rootScope = $r;
}]
));
it("should display the welcome text properly", function() {
var element = $compile('<div data-app-welcome>User</div>')($rootScope);
expect(element.html()).to.match(/Welcome/i);
})
});
Midwayテスト:
<!-- lang: js -->
//
// test/midway/directives/directivesSpec.js
//
describe("Midway: Testing Directives", function() {
var tester;
beforeEach(function() {
tester = ngMidwayTester('App');
});
afterEach(function() {
tester.destroy();
tester = null;
});
it("should properly create the youtube listings with the directive in mind", function(done) {
var $youtube = tester.inject('$appYoutubeSearcher');
var html = '';
html += '<div data-app-youtube-listings id="app-youtube-listings">';
html += ' <div data-ng-include="\'templates/partials/youtube_listing_tpl.html\'" data-ng-repeat="video in videos"></div>';
html += '</div>';
$youtube.query('latest', false, function(q, videos) {
var scope = tester.viewScope().$new();
scope.videos = videos;
var element = tester.compile(html, scope);
setTimeout(function() {
var klass = (element.attr('class') || '').toString();
var hasClass = /app-youtube-listings/.exec(klass);
expect(hasClass.length).to.equal(1);
var kids = element.children('.app-youtube-listing');
expect(kids.length > 0).to.equal(true);
done();
},1000);
});
});
});
E 2 Eテスト:
<!-- lang: js -->
//
// test/e2e/directives/directivesSpec.js
//
describe("E2E: Testing Directives", function() {
beforeEach(function() {
browser().navigateTo('/');
});
it('should have a working welcome directive apply it\'s logic to the page', function() {
browser().navigateTo('#!/videos');
expect(browser().location().path()).toBe("/videos");
expect(element('#app-welcome-text').html()).toContain('Welcome');
});
it('should have a working youtube listing directive that goes to the right page when clicked', function() {
browser().navigateTo('#!/videos');
element('.app-youtube-listing').click();
expect(browser().location().path()).toMatch(/\/videos\/.+/);
});
});