Ember 测试:无法读取 null 的属性“createRecord”
Posted
技术标签:
【中文标题】Ember 测试:无法读取 null 的属性“createRecord”【英文标题】:Ember Testing: Cannot read property 'createRecord' of null 【发布时间】:2014-10-31 12:00:27 【问题描述】:似乎store
在我的 Ember 测试中不可用,无论是在 ObjectController
的上下文中还是在任何单元测试中。我的单元测试:
`import test, moduleFor from "ember-qunit"`
`import DS from "ember-data"`
moduleFor "controller:register", "RegisterController",
test "store is working", ->
expect 1
controller = @subject()
Ember.run(->
sampleUser = controller.get("store").createRecord("user",
username: "myuser"
password: "otherpassword"
)
ok(sampleUser instanceof DS.Model)
)
测试将给出:
在测试 #1 中死亡 (
http://localhost:4200/assets/vendor.js:73539:13
) 在 eval (app/tests/unit/controllers/register-test.js:19:5) 在 requireModule (http://localhost:4200/assets/vendor.js:54:29
) 在http://localhost:4200/assets/test-loader.js:14:29
: 无法读取 null 的属性“createRecord”
谁能解释为什么我无法从我的测试或控制器本身(运行测试时)访问DS
功能?
【问题讨论】:
您能否手动创建一个 store 实例 - 然后将其注入 /add 到您的控制器(正在测试中)以验证它是否按预期工作? 【参考方案1】:您可以将 ember-data 存储添加到单元测试的“需求”部分。您还需要将任何正在创建的模型添加到“需求”部分,如下所示:
needs: ['service:store', 'model:user']
这会将 store 的真实实例注入到正在测试的对象(控制器、组件、路由等)中。
【讨论】:
【参考方案2】:因为 ember-qunit 不会将 store 注入到您的控制器中,所以它适用于单元测试,而不是集成测试。并且 Ember Data 的存储超出了该控制器的范围。
【讨论】:
好的,那我该如何解决? 你想在这里测试什么?灰烬数据?我会将单元测试添加到 Ember Data 的框架中,而不是您的框架中。和测试 jQuery 一样。 github.com/emberjs/data/blob/master/packages/ember-data/tests/… 嗯...我有很多控制器调用store
,我想防止我的控制器单元测试失败而不是执行集成测试。我想这一定是一个非常普遍的情况。我有点惊讶它没有在 Ember 文档中直接解决,但就这样吧。 @Kingpin2k 你有什么建议吗?我确实看过之前发送的链接,但恐怕我没有从中获得足够的信息来解决这个问题。
在你的控制器上注入一个虚假的 store,返回你所期望的。 Ember-qunit 并不是真正为 Ember Data 构建的,它是为 Ember 构建的,因此它并没有真正考虑 Ember Data。以上是关于Ember 测试:无法读取 null 的属性“createRecord”的主要内容,如果未能解决你的问题,请参考以下文章
Ember cli mirage 错误:补丁处理程序无法读取 null 的属性更新
NuxtJS Typescript click.native '无法读取 null 的属性'测试''
尝试测试获取所有路由时出现“TypeError:无法读取 null 的属性 '1'”?
Angular 混合应用程序测试“无法读取 null 的属性‘nativeElement’”
Karma 测试 Angular - TypeError:无法读取 null 的属性“recipientAddressId”