4

私はこのテスト構造を持っていて、それは機能していますが、この単体テスト .js ファイルにさらにテストを入れると要件をカバーしませんが、関連するすべてのテストがそこにあるはずです。

働く:

'use strict';
describe('lessonplannerFactory unit tests', function () {

    // load the service's module
    // beforeEach(module('clientApp'));

    // Arrange
    var dateFactory = {
        getVisibleDateRange: function (startDate, endDate, visibleWeekDays) {
            // I do not care about the parameters, I just want to stub out the visible days with 2 stubs
            var days = [ moment(new Date(2014, 0, 1)), moment(new Date(2014, 0, 2))];
            return days;
        }
    };

    // load the service's module
    beforeEach(module('clientApp', function ($provide) {
        $provide.value('dateFactory', dateFactory);
    }));

    // Arrange
    var lessonPlannerFactory;
    beforeEach(inject(function (_lessonPlannerFactory_) {  // The underscores before/after the factory are removed by the $injector
        lessonPlannerFactory = _lessonPlannerFactory_;
    }));

    it('creates periods by a daily rotation of n according to a given timetable for a certain timespan', inject(function (_dailyPeriodsTestDataFactory_) {

        // Arrange
        var testCases = _dailyPeriodsTestDataFactory_.testCases;  // specific test data

        // Act
        // Do something with the injected lessonPlannerFactory.method1(testCases[0],..);

        // Assert

    }));
});

私が欲しいのは、これを私自身の言葉または疑似コードで説明したものです。

describe("lesson planner factory unit tests")
{

   // Inject a lesson planner factory instance for each test

test1(_specificTestData1_)
{
    // Arrange
    var data = _specificTestData1_;

    var stub1 = { } // setup specific stub

    inject this specific stub into this test with $provide.value = mock // This stub is used INSIDE the method1 to stub out a factory dependency

    // Act
    var result = lessonPlannerFactory.method1(data,..);

    // Assert

}

test2(_specificTestData2_)
{
    // Arrange
    var data = _specificTestData2_;

    var stub2 = { } // setup specific stub

    inject this specific stub into this test with $provide.value = mock // This stub is used INSIDE the method2 to stub out a factory dependency

    // Act
    var result = lessonPlannerFactory.method2(data,..);

    // Assert

}

}

そして、これは私が試したものであり、うまくいきません。

レッスンプランナーファクトリーが前に注入/作成され、レッスンプランナーファクトリーには依存関係として実際のスタブオブジェクトがあるため、テスト内のこの時点でスタブを $provide.value に割り当てるのは遅すぎると思います。見てください:

'use strict';
describe('lessonplannerFactory unit tests', function () {

    // load the service's module
    beforeEach(module('clientApp'));

    // Arrange
    var lessonPlannerFactory;
    beforeEach(inject(function (_lessonPlannerFactory_) {  // The underscores before/after the factory are removed by the $injector
        lessonPlannerFactory = _lessonPlannerFactory_;
    }));

    it('creates periods by a daily rotation of n according to a given timetable for a certain timespan', inject(function (_dailyPeriodsTestDataFactory_) {

        // Arrange
        var testCases = _dailyPeriodsTestDataFactory_.testCases;  // specific test data

        // specific test stub
        var dateFactory = {
            getVisibleDateRange: function (startDate, endDate, visibleWeekDays) {
                // I do not care about the parameters, I just want to stub out the visible days with 2 stubs
                var days = [ moment(new Date(2014, 0, 1)), moment(new Date(2014, 0, 2))];
                return days;
            }
        };

        // load the stub
        module('clientApp', function ($provide) {
            $provide.value('dateFactory', dateFactory);
        });

        // Act          on the testcases in a for loop
        var result = lessonPlannerFactory.createPeriodsDaily(testCases[i].data1,..);

        // Assert
    }));
});

それは私が得るエラーです:

TypeError: Cannot read property 'running' of undefined
    at isSpecRunning (http://localhost:3000/base/app/bower_components/angular-mocks/angular-mocks.js:1924:65)

特定のスタブが必要なため、 beforeEach メソッドではなく単体テスト自体の内部にサービス依存関係のスタブを挿入するにはどうすればよいですか!?

4

1 に答える 1

1

Pascal さん、入れ子になった記述がうまくいかない理由がまだわかりません。多分私はあなたの要件を取得していませんか?

describe('overall test of A', function() {
    describe('first test of A', function() {
        beforeEach(function() {
            // arrange
        });

        it('should do X', function() {
            // test
            // assert
        });
    });
    describe('second test of A', function() {
        beforeEach(function() {
            // arrange
        });

        it('should do Y', function() {
            // test
            // assert
        });
    });
});
于 2014-05-11T01:02:52.553 に答える