嗨,我是新的测试与业力Jasmine。我正在尝试测试一个函数,但是它会抛出一个我尚未测试的值的错误是错误TypeError: Cannot set property 'statement' of undefined
这是描述块切换选项按钮中的相关代码代码我收到错误(这是唯一的除了注入rootcope之外我添加的代码)
fdescribe('Online Statements', () => {
const module = window.module;
const inject = window.inject;
beforeEach(module('wbbUiApp'));
describe('Controller', () => {
let scope;
let controller;
let injectibles;
let bindings;
const createController = userDetails => {
inject(($componentController,
$window,
$filter,
$rootScope) => {
// The same `$inject` array values listed in `account-activity.controller.js`
injectibles = {
$window,
$filter,
$rootScope
};
// The same bindings listed in `account-activity.component.js`
bindings = {
accountDetails
};
controller = $componentController('onlineStatements', injectibles, bindings);
});
};
describe('toggle options button', () => {
//beforeEach(controller.statement = { showOptions: true })
it('should set the scope value to the index', () => {
const index = 1;
const dateId = 1290488400000;
controller.toggleOptions(index, dateId)
expect(controller.activeRow).toEqual(index);
})
})
});
这是控制器中的代码错误正在发生因为this.statement.showOptions
我试着将其注释掉,如果它不在控制器中它工作正常。我试过在construtor和init上设置它,就像这个statement: { showOptions: false }
这样this.statement.showOptions = true;
toggleOptions(index, currentDate) {
// toggle the dropdown with all buttons if its new then showing options is always true
if (currentDate === this.currentSelectedDate) {
this.statement.showOptions = !this.statement.showOptions;
} else {
this.statement.showOptions = true;
}
this.activeRow = index;
this.currentSelectedDate = currentDate;
}
这可能是一件简单的事情,因为我刚刚开始。先感谢您。
beforeEach(controller.statement = { showOptions: true })
不是一种有效的做事方式。
beforeEach
接受一项功能。它应该是:
beforeEach(() => {
controller.statement = { showOptions: true }
})
正如另一个答案所解释的那样,controller
变量未在其使用的函数范围内定义。它是在兄弟姐妹declare
中定义的。如果两个describe
都使用具有相同本地依赖关系的控制器实例,则应将整个inject(($componentController, ...)
移动到父describe
,在那里它可以与beforeEach
连接:
beforeEach(module('wbbUiApp'));
beforeEach(inject(($componentController, ...));
您已将controller
的变量范围限制为第一个describe()。在第二个describe()中,控制器因此而未定义。