Tag: chai

当用Chai进行unit testing时,“TypeError:无法读取属性”的“undefined”地址是什么意思?

当使用chai进行unit testing并且没有任何testing通过时,我仍然收到这个错误消息。 这在这方面意味着什么? 谢谢。 var chai = require('chai'); var chaiHttp = require('chai-http'); var server = require('../server.js'); var should = chai.should(); var app = server.app; var storage = server.storage; chai.use(chaiHttp); describe('Shopping List', function() { it('should list items on GET', function(done) { chai.request(app) .get('/items') .end(function(err, res) { res.should.have.status(200); res.should.be.json; // jshint ignore:line res.body.should.be.a('array'); res.body.should.have.length(3); res.body[0].should.be.a('object'); res.body[0].should.have.property('id'); res.body[0].should.have.property('name'); […]

摩卡 – 之前()不执行“之前”按预期?

在mocha + chaitesting代码中,我有一个before块来初始化一些variables“accPolicyData.accSizes”。 1 var expect = require('chai').expect; 2 var dataDriven = require('data-driven'); 3 var accPolicyData = require("./samples/accounts-policy-data"); 4 var configReadr; 5 var ecpDB; // = require('ecp_model'); 6 var utils = require('../test_utils'); 7 8 describe("Test suite for account policy limits validation", function() { 9 10 before(function(done) { 11 12 // read and process commandline args. […]

asynchronous摩卡testing(与Chai断言库)应该失败,但被标记为通过

我已经在TypeScript中使用mochatesting框架和chai断言库(我对这三者都是新手)写了一些testing,并看到引发了一个错误,并在下面的代码中调用了assert.fail()。 但是,testing仍然被标记为通过。 我很困惑,为什么会这样呢,如果我在承诺上做错了什么。 另外,如下所示,还有一个UnhandledPromiseRejectionWarning。 我不明白为什么这被标记为未处理,因为我已经包括一个catch块。 我将不胜感激关于如何解决这个问题的build议,谢谢! User.all() .then((users) => { expect(users.length).to.equal(0); return User.create('test@test.email', '12345', 'test', true, true); }) .then(() => { return User.all(); }) .then((users) => { expect(users.length).to.equal(1); }) .catch((error) => { assert.fail(); }); debugging控制台 ✓ should create a new record with existing e-mail in the database (node:29903) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 3): […]

摩卡更改afterEach超时

我正在用摩卡和柴编写一个节点应用程序。 某些testing调用外部API进行集成testing,这可能需要90秒才能执行此操作。 为了正确清理,我定义了一个afterEach() – 块,它将删除任何生成的远程资源,以防期望失败,并且一些资源没有被删除。 testing本身有一个增加的超时,而其余的testing应保持其默认和小超时: it('should create remote resource', () => {…}).timeout(120000) 然而,我不能用afterEach().timeout(120000)做同样的afterEach().timeout(120000) ,因为这个函数不存在 – 由于未知的资源名称,我也不能使用function () notation: describe('Resources', function () { beforeEach(() => { this._resources = null }) it('should create resources', async () => { this._resources = await createResources() expect(false).to.equal(true) // fail test, so… await deleteResources() // will never be called }) afterEach(async() […]

在摩卡testing中没有发现柴的出口

我已经创build了简单的摩卡testing。 当使用Node“assert”模块时,它完美地工作。 我从命令行(Mocha作为全局节点模块安装)运行它: $ mocha myTest.js ․ 1 test complete (6 ms) 该脚本如下所示: var assert = require("assert") describe('Array', function(){ describe('#indexOf()', function(){ it('should return -1 when the value is not present', function(){ assert.equal(-1, [1,2,3].indexOf(5)); assert.equal(-1, [1,2,3].indexOf(0)); }) }) }) 那么,我试图添加柴而不是断言库。 我先安装它: npm install chai 所以,在我的项目中创build了目录node_modules。 太好了。 然后,我改变了脚本使用柴: var chai = require("chai"); describe('Array', function(){ describe('#indexOf()', function(){ it('should […]

在chaijs做unit testing有关expect.throw的问题

我正在使用chaocha和mochajs进行unit testing。 这是chaijs的文件。 http://chaijs.com/api/bdd/ 根据文档,它可以检查函数是否抛出exception。 所以,用这个代码: var expect = require("chai").expect; describe("Testing", function(){ var fn = function(){ throw new Error("hello"); }; //map testing describe("map", function(){ it("should return error",function(){ expect(fn()).to.not.throw("hello"); }); }); }); testing应该说“通过”? 它期待一个错误,函数fn正在给它。 但是我得到这个: 11 passing (37ms) 1 failing 1) Testing map should return error: Error: hello at fn (/vagrant/projects/AD/tests/shared/functionalTest.js:13:29) at Context.<anonymous> (/vagrant/projects/AD/tests/shared/functionalTest.js:17:11) at Test.Runnable.run […]

如何在摩卡testing中要求相同的文件

我有config/index.js ,它根据设置的NODE_ENV环境variables返回一个不同的configuration文件。 我试图写一个简单的testing,以确保正确的configuration是为每个环境返回的,但我遇到了一个问题,其中只有第一个要求实际上是被调用,随后的要求相同的文件正在使用的值第一个要求。 我应该如何改变我的testing来解决这个问题? describe('config', function () { it('should return dev config', function (done) { process.env.NODE_ENV = 'development'; var config = require(__dirname + '/../../config'); // development config console.log(config.plugins.ipFilter); done(); }); it('should return prod config', function (done) { process.env.NODE_ENV = 'production'; // development config from above. // the require here doesn't actually get invoked var config […]

ChaiJS应该 – testing空string

根据shouldJS网站上的文档,我应该可以做到这一点: ''.should.be.empty(); ChaiJS网站没有应用语法的例子,因为它们会列出所期望的 ,看起来像上面的那样。 然而这产生: TypeError: Property 'empty' of object #<Assertion> is not a function 什么是与应该风格的柴empty()语法empty() ?

在sinon中创build一个假的object.method()从头开始?

TL;博士 如何在sinon中创build一个object.method()从头开始? 上下文 例如,我有一个Parser类的家庭,其中每个实现#parse(text)方法,并返回一个ParseTree对象或返回null 。 我正在进行unit testing,我没有testingParser对象(他们在别处testing过),但是我需要一个可testing的对象来响应#parse() 。 我可以实例化和存根真正的parsing器,但是拖拽不必要的代码到这部分testing中。 这个问题 我很确定,使用sinon的spy(),stub()和/或mock()api很容易,所以:我如何创build一个可testing的对象: 响应parse()方法 validation它被调用一次 返回一个我指定的任意对象? 我试过了 下面的例子在sinon.stub()的调用中失败了,因为sinon.spy()对象不能用parse方法存根sinon.spy() 。 (这个例子也应该validationfake_parser.parse()被test_text调用了一次,但是没有): var test_text = 'any text' var fake_parse_tree = sinon.spy() var fake_parser = sinon.stub(sinon.spy(), 'parse').returns(fake_parse_tree) expect(fake_parser.parse(test_text)).to.equal(fake_parse_tree)

如何使用Mocha with Promises / ES6生成器?

我想用ES6 generators使用Mocha ,也可以随意使用。 经过一番研究,我构build了以下代码片段: describe('test', function() { it('should not work', function() { expect(function() { return co(function*() { yield Service.validate(); }); }).to.throw(new Error('error')); }); }); Service.validate抛出new Error('error') ,这就是我所expect 。 module.exports = { validate: function() { return co(function*() { // use yield to access db and so on throw new Error('error'); }); } }; 但是,下面的代码抛出AssertionError: expected [Function] […]