我可以将 QUnit 钩子设置为在套件中的所有测试之前运行吗?



我正在使用 ember-qunit,并且在我的应用程序中有一个服务可以进行一些重要的 api 调用。为了解决这个问题,我正在使用一个测试助手:

// tests/helpers/mock-my-service.js
import { mock } from 'ember-data-factory-guy';
export function stubMyService(hooks) {
hooks.beforeEach(function() {
mock({
type: 'GET',
url: 'https://example.com',
responseText: [
{ some: 'complex data' }
],
status: 200
});
});
}
// tests/some-test.js
import { stubMyService } from 'helpers/mock-my-service';
module('Integration | Component | Whatever', function(hooks) {
stubMyService(hooks);
...
}

最近,一项功能要求在应用程序中相当高级别的位置使用此服务,这意味着我现在几乎在每个测试中都说stubMyService(hooks);。这意味着从现在开始,我必须在所有测试中都包含此帮助程序。有没有办法全局包含钩子?例如,RSpec 具有:

config.before(:suite) do
# runs before entire suite
end

我很想能够做这样的事情

// tests/test-helper.js
import { stubMyService } from 'helpers/mock-my-service';
QUnit.module.beforeSuite(function(hooks) {
stubMyService(hooks);
});

有没有好方法可以做到这一点?还是有更团结的方式来解决这个问题?余烬有没有自己的方法?我在文档中没有看到任何允许这样做的内容。

不确定这是否适合您的需求,但 QUnit 确实有一个用于测试和模块的全局事件/回调系统。因此,您可以尝试在以下情况下执行此操作:

QUnit.testStart( ( { module, name } ) => {
mock({
type: 'GET',
url: 'https://example.com',
responseText: [
{ some: 'complex data' }
],
status: 200
});
});

(还有一个testDone回调,用于拆除那个模拟...

相关内容

  • 没有找到相关文章

最新更新