私はこのテスト構造を持っていて、それは機能していますが、この単体テスト .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 メソッドではなく単体テスト自体の内部にサービス依存関係のスタブを挿入するにはどうすればよいですか!?