我有一个控制器我正在使用Ember CLI进行测试,但控制器的承诺无法解决,因为控制器的transitionToRoute
方法正在返回null
:
未捕获的TypeError:无法读取属性' transitionToRoute'为null
login.coffee
success: (response) ->
# ...
attemptedTransition = @get("attemptedTransition")
if attemptedTransition
attemptedTransition.retry()
@set "attemptedTransition", null
else
@transitionToRoute "dashboard"
login-test.coffee
`import {test, moduleFor} from "ember-qunit"`
moduleFor "controller:login", "LoginController", {
}
# Replace this with your real tests.
test "it exists", ->
controller = @subject()
ok controller
###
Test whether the authentication token is passed back in JSON response, with `token`
###
test "obtains authentication token", ->
expect 2
workingLogin = {
username: "user@pass.com",
password: "pass"
}
controller = @subject()
Ember.run(->
controller.setProperties({
username: "user@pass.com",
password: "pass"
})
controller.login().then(->
token = controller.get("token")
ok(controller.get("token") isnt null)
equal(controller.get("token").length, 64)
)
)
当删除行@transitionToRoute("dashboard")
时,测试通过;否则,测试失败。
如何在保持控制器逻辑的同时修复此错误?
答案 0 :(得分:2)
解决方法:如果transitionToRoute
为target
,则绕过null
。类似的东西:
if (this.get('target')) {
this.transitionToRoute("dashboard");
}
我遇到了同样的错误并且稍微挖了一下Ember源代码。在我的情况下,ControllerMixin
会抛出此错误,因为get(this, 'target')
在this line处为null
。如果没有进一步的上下文,测试模块可能不知道在这样的控制器单元测试中target
应该是什么PdfPCell imagecell= new PdfPCell();
imagecell.add element(myImage);
imagecell.setHorizontalAlignment(Element.ALIGN_RIGHT);
,所以你可能需要手动设置它或者只是绕过它。
答案 1 :(得分:0)
由于您对转换本身不感兴趣,因此您可以在控制器上隐藏transitionToRoute
方法。
JS:
test('Name', function() {
var controller = this.subject();
controller.transitionToRoute = Ember.K;
...
}
咖啡:
test "it exists", ->
controller = @subject()
controller.transitionToRoute = Ember.K
ok controller
答案 2 :(得分:0)
在单元测试中执行它时,不确定为什么transitionToRoute方法未定义 - 它可能与执行上下文不同的事实有关。
一种可能的解决方法是将transitionToRoute调用移动到路径而不是它在控制器中。这样你的控制器就会向它的路线发送动作,你只会在路线上保持路线。
围绕哪个更好的做法进行了大讨论 - 从控制器路由到否,但这是另一个故事。