gpt4 book ai didi

angularjs - 创建单元测试,其中每个测试都有其特定的测试数据和测试模拟

转载 作者:行者123 更新时间:2023-12-01 05:12:35 25 4
gpt4 key购买 nike

我有这个测试结构并且它正在工作,但是当我在这个单元测试 .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

}

}

这是我尝试过的,但它不起作用。

我假设在测试中此时将 stub 分配给 $provide.value 为时已晚,因为之前注入(inject)/创建了类(class)计划工厂,并且类(class)计划工厂具有真正的 stub 对象作为依赖项。只是看看:
'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)

那么,我怎样才能为服务依赖注入(inject)一个 stub 而不是在 beforeEach 方法中,而是在单元测试本身内部,因为我需要一个特定的 stub !?

最佳答案

帕斯卡,我仍然不明白为什么嵌套描述对你不起作用。也许我只是没有得到你的要求?

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
});
});
});

关于angularjs - 创建单元测试,其中每个测试都有其特定的测试数据和测试模拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23579086/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com