我在监视模式下使用practicalmeteor:mocha
并编写了一些UI测试(单元测试模板组件)。
我有一个奇怪的问题,我的失败测试不会显示断言消息,而是显示代码片段。
我附上了一个带有示例输出的图像:
不幸的是,我没有在软件包或mocha本身的文档中找到任何与此相关的配置信息。
我的测试命令如下:
meteor test --driver-package practical meteor:mocha
测试代码如下:
// PACKAGES
import {Meteor} from 'meteor/meteor';
import {Template} from 'meteor/templating';
import {$} from 'meteor/jquery';
import {Random} from 'meteor/random';
import {chai, assert} from 'meteor/practicalmeteor:chai';
import StubCollections from 'meteor/hwillson:stub-collections';
import {sinon} from 'meteor/practicalmeteor:sinon';
// HELPERS
import {withRenderedTemplate, renderTemplate, withDiv} from '../../test-helpers.js';
// COMPONENTS
import '../../../startup/both/schemaDefaults';
import {loadingClassName} from '../../components/loading/loading';
import {Comments} from '../../../api/comments/Comments';
import '../comments.js';
describe("UI/Comments", function () {
beforeEach(function () {
StubCollections.stub(Comments);
Template.registerHelper('_', key => key);
});
afterEach(function () {
Template.deregisterHelper('_');
StubCollections.restore();
Meteor.subscribe.restore();
});
////////////////////////////////////////////////////////
it("renders a loading symbol on load", function (done) {
sinon.stub(Meteor, 'subscribe', () => ({
subscriptionId: Random.id(),
ready: () => false,
}));
withRenderedTemplate(Template.comments, {}, el => {
const target = $(el);
chai.assert.equal(target.find('.' + loadingClassName).length, 1);
done();
});
});
////////////////////////////////////////////////////////
it("displays a message if no comments exist for the given document", function (done) {
sinon.stub(Meteor, 'subscribe', () => ({
subscriptionId: Random.id(),
ready: () => true,
}));
withRenderedTemplate(Template.comments, {docId: Random.id()}, el => {
const target = $(el);
chai.assert.equal(target.find('.' + loadingClassName).length, 0);
chai.assert.equal(target.find('.no-comments').length, 1);
done();
});
});
////////////////////////////////////////////////////////
it("displays comments, if comments are found", function (done) {
sinon.stub(Meteor, 'subscribe', () => ({
subscriptionId: Random.id(),
ready: () => true,
}));
const userId = Random.id();
const commentDoc = {
title: Meteor.user().username,
status: 0,
docId: Random.id(),
description: "this is a comment",
createdAt: new Date().getTime(),
updatedAt: new Date().getTime(),
createdBy: userId,
updatedBy: userId,
};
Comments.insert(commentDoc);
withRenderedTemplate(Template.comments, {docId: Random.id()}, el => {
const target = $(el);
assert.equal(target.find('.' + loadingClassName).length, 0);
assert.equal(target.find('.no-comments').length, 0);
assert.isAbove(target.find('.comment-entry').length, 0);
done();
});
});
////////////////////////////////////////////////////////
it("displays a comment of self different than comments of others", function (done) {
assert.fail("not yet implemented");
})
});
答案 0 :(得分:0)
好的,我在挖掘DOM之后找到了答案。
这对非Meteor用户来说也很有趣:
mocha web报告器使用错误输出一个名为val intent = Intent(this@HomeActivity,ProfileActivity::class.java);
intent.putExtra("profileName", "John Doe")
var b = Bundle()
b.putBoolean("isActive", true)
intent.putExtras(b)
startActivity(intent);
的css类名,这当然非常容易受到css覆盖的影响。
我首先想到,这可能不是问题,因为我通常使用带前缀的类名来避免此类冲突。
但是我安装了一个带编辑器的软件包,它还带有一个默认的css,它也有一个条目,名为:
.error
Meteor app巧妙地捆绑了所有这些,在运行我的Mocha测试时,错误字段隐藏在网络记者中。
我删除了编辑器包,我的问题得到了解决。
我从中学到了什么:不要在包中使用css类的通用名称。