Ember tests/Mirage 未找到 DOM 个元素
Ember tests/Mirage not finding DOM elements
我正在尝试使用 Mirage 在 Ember 中进行一些基本的验收测试。此时我只使用固定装置来填充测试环境,只是为了找到我的脚。当我在测试环境中 运行 ember 时(即使用 -e 测试),我可以看到我的应用程序正在填充预期数据。而且 DOM 有一些按钮等等。一切都很好。
但是,当我 运行 测试访问页面并单击按钮时,测试告诉我找不到按钮。换句话说,运行ning -e test 和检查 localhost 显示应用程序似乎没问题。但是然后检查 localhost/tests 有一个测试失败说它找不到在 -e 测试屏幕中肯定存在的按钮。
我已经确认该按钮存在于 -e 测试环境中,同时使用检查器并在控制台行发出基本 jquery select。
所以我假设设置或配置中的某处有问题?
特别是:
module('Acceptance | basic tests', {
beforeEach: function() {
this.application = startApp();
},
afterEach: function() {
Ember.run(this.application, 'destroy');
}
});
test('visiting /orders', function(assert) {
visit('/orders');
andThen(function() {
assert.equal(currentURL(), '/orders');
});
});
test('visiting /basic', function(assert) {
visit('/orders');
click('top-row-orders-button'); //button.top-row-orders-button fails too
andThen(function() {
assert.equal(currentURL(), '/orders');
});
});
第一个测试(仅访问 url)通过。第二个测试是它说找不到按钮的地方。再一次,当我服务 -e 测试时,并在控制台输入:$('.top-row-orders-button')
它 returns 有问题的按钮。
很高兴提供任何人需要的更多信息。将不胜感激任何帮助。几天来我一直在努力解决这个问题,但没有成功。
编辑添加:
更一般地说,在使用 Mirage 时,有没有办法查看 /tests 环境中的 DOM 是什么(即 DOM 实际测试是 运行宁上)?即,每个 Mirage 测试的 DOM 是什么样的?
我 运行 通过你的存储库,发现你将 Mirage 工厂配置错误...使用 mirage
时,你应该准确定义应用程序的期望。
例如:当 运行 应用程序时,api 你在 Search
对象中调用 return 电影。在测试时,它 return 将电影列表对象作为响应。如果没有 Search 对象,您检查了适配器 -> return [ ] 的查询函数。
Mirage 所做的是 api 嘲讽。当调用 api 时,它 return 是你在 config.js 中定义的响应,它仍然通过你在 adapters
中的查询函数中定义的承诺。由于模型是空的,没有任何东西可以渲染,测试失败。
将 mirage 配置文件更改为
this.get('http://www.omdbapi.com/', function(db, request) {
return { Search: db.movies };
});
并相应地将 factories/movie 更改为 return 对象键(在你的情况下说 'imdbID' 而不是 'id')。
点击助手 (click('top-row-orders-button')
) 采用 CSS 选择器,因此如果您正在寻找具有 class top-row-orders-button
的 DOM 节点,您想用
click('.top-row-orders-button');
如果找不到该按钮,请尝试在 click
帮助程序之前放置一个 debugger
,然后在控制台中键入 $('.top-row-orders-button')
。
你能解释一下 -e test
是什么意思吗?人们通常通过两种方式在浏览器中查看测试 运行ner。首先,如果您已经完成 ember serve
,您可以访问 localhost:4200/tests
。但是,推荐的方式是使用ember test --server
。这将使用 testem 并在您的控制台中启动测试 运行ner,但它还会向您显示一个 link,类似于
Open the URL below in a browser to connect.
http://localhost:7357/
你可以去看看测试运行ner.
首选第二种方法的原因是因为 ember test
命令使用 Ember 应用程序,同时具有 build-time (节点)环境test
,以及 test
的 运行-time 环境(即 config/environment.js
下的环境变量),而使用 ember serve
然后访问 /tests
使用 development
的构建时环境和 test
.
的 运行 时环境
通常您不需要指定 --environment test
- 您可以只使用 ember test --server
命令。
最后,关于您的最后一个问题,实际上并没有 "Mirage test" 这样的东西。 Mirage 的服务器在验收测试中与您的 Ember 应用程序一起启动。但是 Mirage 对您的 Ember 应用一无所知,甚至不知道它正在测试中。它基本上只是模拟 XMLHttpRequest,然后停在那里。
在测试主体中添加调试器语句并打开控制台。重新运行测试。
应暂停该应用程序。在控制台中,您可以检查 DOM。使用 Chrome。
在控制台中尝试 $('#ember-testing')
。
您应该会在控制台中看到一个 DOM 片段。您可以与此 DOM 片段互动。单击箭头将其打开。
您在 html 中看到您要定位的元素了吗?如果存在,请尝试使用 jQuery 再次选择它。如果 jQuery 没有找到,则说明您的选择器有误。
我正在尝试使用 Mirage 在 Ember 中进行一些基本的验收测试。此时我只使用固定装置来填充测试环境,只是为了找到我的脚。当我在测试环境中 运行 ember 时(即使用 -e 测试),我可以看到我的应用程序正在填充预期数据。而且 DOM 有一些按钮等等。一切都很好。
但是,当我 运行 测试访问页面并单击按钮时,测试告诉我找不到按钮。换句话说,运行ning -e test 和检查 localhost 显示应用程序似乎没问题。但是然后检查 localhost/tests 有一个测试失败说它找不到在 -e 测试屏幕中肯定存在的按钮。
我已经确认该按钮存在于 -e 测试环境中,同时使用检查器并在控制台行发出基本 jquery select。
所以我假设设置或配置中的某处有问题?
特别是:
module('Acceptance | basic tests', {
beforeEach: function() {
this.application = startApp();
},
afterEach: function() {
Ember.run(this.application, 'destroy');
}
});
test('visiting /orders', function(assert) {
visit('/orders');
andThen(function() {
assert.equal(currentURL(), '/orders');
});
});
test('visiting /basic', function(assert) {
visit('/orders');
click('top-row-orders-button'); //button.top-row-orders-button fails too
andThen(function() {
assert.equal(currentURL(), '/orders');
});
});
第一个测试(仅访问 url)通过。第二个测试是它说找不到按钮的地方。再一次,当我服务 -e 测试时,并在控制台输入:$('.top-row-orders-button') 它 returns 有问题的按钮。
很高兴提供任何人需要的更多信息。将不胜感激任何帮助。几天来我一直在努力解决这个问题,但没有成功。
编辑添加:
更一般地说,在使用 Mirage 时,有没有办法查看 /tests 环境中的 DOM 是什么(即 DOM 实际测试是 运行宁上)?即,每个 Mirage 测试的 DOM 是什么样的?
我 运行 通过你的存储库,发现你将 Mirage 工厂配置错误...使用 mirage
时,你应该准确定义应用程序的期望。
例如:当 运行 应用程序时,api 你在 Search
对象中调用 return 电影。在测试时,它 return 将电影列表对象作为响应。如果没有 Search 对象,您检查了适配器 -> return [ ] 的查询函数。
Mirage 所做的是 api 嘲讽。当调用 api 时,它 return 是你在 config.js 中定义的响应,它仍然通过你在 adapters
中的查询函数中定义的承诺。由于模型是空的,没有任何东西可以渲染,测试失败。
将 mirage 配置文件更改为
this.get('http://www.omdbapi.com/', function(db, request) {
return { Search: db.movies };
});
并相应地将 factories/movie 更改为 return 对象键(在你的情况下说 'imdbID' 而不是 'id')。
点击助手 (click('top-row-orders-button')
) 采用 CSS 选择器,因此如果您正在寻找具有 class top-row-orders-button
的 DOM 节点,您想用
click('.top-row-orders-button');
如果找不到该按钮,请尝试在 click
帮助程序之前放置一个 debugger
,然后在控制台中键入 $('.top-row-orders-button')
。
你能解释一下 -e test
是什么意思吗?人们通常通过两种方式在浏览器中查看测试 运行ner。首先,如果您已经完成 ember serve
,您可以访问 localhost:4200/tests
。但是,推荐的方式是使用ember test --server
。这将使用 testem 并在您的控制台中启动测试 运行ner,但它还会向您显示一个 link,类似于
Open the URL below in a browser to connect.
http://localhost:7357/
你可以去看看测试运行ner.
首选第二种方法的原因是因为 ember test
命令使用 Ember 应用程序,同时具有 build-time (节点)环境test
,以及 test
的 运行-time 环境(即 config/environment.js
下的环境变量),而使用 ember serve
然后访问 /tests
使用 development
的构建时环境和 test
.
通常您不需要指定 --environment test
- 您可以只使用 ember test --server
命令。
最后,关于您的最后一个问题,实际上并没有 "Mirage test" 这样的东西。 Mirage 的服务器在验收测试中与您的 Ember 应用程序一起启动。但是 Mirage 对您的 Ember 应用一无所知,甚至不知道它正在测试中。它基本上只是模拟 XMLHttpRequest,然后停在那里。
在测试主体中添加调试器语句并打开控制台。重新运行测试。
应暂停该应用程序。在控制台中,您可以检查 DOM。使用 Chrome。
在控制台中尝试 $('#ember-testing')
。
您应该会在控制台中看到一个 DOM 片段。您可以与此 DOM 片段互动。单击箭头将其打开。
您在 html 中看到您要定位的元素了吗?如果存在,请尝试使用 jQuery 再次选择它。如果 jQuery 没有找到,则说明您的选择器有误。