Angularjs 测试未定义的控制器语句

Angularjs 测试未定义的控制器语句,angularjs,ecmascript-6,karma-jasmine,Angularjs,Ecmascript 6,Karma Jasmine,嗨,我是新的测试与噶玛茉莉花。我试图测试一个函数,但它在一个我尚未测试的值上抛出一个错误,这里是错误TypeError:cannotset属性“statement”of undefined 下面是我得到错误的描述块切换选项按钮中的相关代码(这是除了注入rootscope之外我添加的唯一代码) 这是控制器中的代码。由于此.statement.showOptions我尝试注释它,如果它不在控制器中,则可以正常工作。我试着在construtor和oninit中设置它,就像下面的语句:{showOpti

嗨,我是新的测试与噶玛茉莉花。我试图测试一个函数,但它在一个我尚未测试的值上抛出一个错误,这里是错误
TypeError:cannotset属性“statement”of undefined
下面是我得到错误的描述块切换选项按钮中的相关代码(这是除了注入rootscope之外我添加的唯一代码)

这是控制器中的代码。由于
此.statement.showOptions
我尝试注释它,如果它不在控制器中,则可以正常工作。我试着在construtor和oninit中设置它,就像下面的
语句:{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;
    }

这可能很简单,因为我才刚刚开始。提前感谢。

您已将
控制器的变量范围限制为第一个descripe()。在第二个descripe()中,控制器将因此而未定义。

您已将
controller
的变量范围限制为第一个descripe()。在第二个descripe()中,控制器将因此而未定义

beforeEach(controller.statement = { showOptions: true })
这不是一种有效的做事方式

在每个
接受函数之前。应该是:

beforeEach(() => {
  controller.statement = { showOptions: true }
})
另一个答案解释道,
控制器
变量未在其使用的函数范围内定义。它是在同级
declare
中定义的。如果两个
descripe
都使用具有相同本地依赖关系的控制器实例,则整个
注入(($componentController,…)
应移动到父
descripe
,在每个
之前可以与
连接:

beforeEach(module('wbbUiApp'));

beforeEach(inject(($componentController, ...));
这不是一种有效的做事方式

在每个
接受函数之前。它应该是:

beforeEach(() => {
  controller.statement = { showOptions: true }
})
另一个答案解释道,
controller
变量未在其使用的函数范围内定义。它是在同级
declare
中定义的。如果两个
描述
使用具有相同本地依赖项的控制器实例,则整个
注入($componentController,…)
应移至父级
描述
,可在每个之前与
连接:

beforeEach(module('wbbUiApp'));

beforeEach(inject(($componentController, ...));

我没有使用那个变量,但这是一个很好的点,我以后会清理,我现在正在尝试很多事情。我没有使用那个变量,但这是一个很好的点,我以后会清理,我现在正在尝试很多事情。
beforeach(controller.statement={showOptions:true})
不是一种有效的方法。在每个人接受函数之前。这将构成现有的答案。@estus我已经尝试了很多方法,包括这一个,我可以删除它。我还没有排除答案,因为没有任何方法可以解决我的问题。但是出于好奇,如果你解释你自己(即使有链接),我为什么不支持你的答案。我觉得这不是一个高质量的答案。你自己说代码需要清理。
在每次之前(controller.statement={showOptions:true})
不是一种有效的方法。在每个人接受函数之前。这将构成现有的答案。@estus我已经尝试了很多方法,包括这一个,我可以删除它。我还没有排除答案,因为没有任何方法可以解决我的问题。但是出于好奇,如果你解释你自己(即使有链接),我为什么不支持你的答案.我觉得这不是一个高质量的答案。你自己说代码需要清理。