茉莉花节点期望不执行

今天我开始testing茉莉花,这对我来说是新的。 由于我正在使用一个使用NodeJS开发的GraphQL服务器,因此我正在使用jasmine-node

以下是我自己写的第一个规范,我认为它是工作的:

 const request = require('request'); const config = require('../sources/config'); const base_url = `http://localhost:${config.graphqlPort}/${config.graphqlRoute}`; describe("GraphQLServer.", () => { it("Should expect something.", () => { expect(1).not.toEqual(2); expect(1).toEqual(1); expect(true).toBe(true); expect(false).not.toBe(true); }); describe('When request is made.', () => { it('Returns statuscode 200.', () => { request.get(base_url, (error, response, body) => { console.log('Error: ', error); console.log(base_url); console.log('StatusCode: ', response && response.statusCode); console.log('Body:', body); expect(true).toBe(true); expect(true).toBe(false); expect(response.statusCode).toBe(200); expect(response.statusCode).toBe(400); done(); }); }); }); }); 

这给出了以下结果:

  .. Finished in 0.018 seconds 2 tests, 4 assertions, 0 failures, 0 skipped Error: null http://localhost:8000/graphql StatusCode: 400 Body: {"errors":[{"message":"Must provide query string."}]} 

很多,如果这正是我所期望的。 我做了一个没有查询string的请求,所以预计正文中的错误。

问题是: it("Should expect something")里面的4个无用的(显而易见的) expects it("Should expect something")工作得很好。 这是结果中的4 assertions 。 其他4个expect的内部it("Returns statuscode 200.")是根本没有在结果(他们不失败,他们不通过),但console.log的是。

我在网上find的每一个例子似乎都是在做我正在做的事情,但我没有设法让这个工作。

我忘记了Jasmine中的确切语法来提出一个修正,但是我相信我知道答案:这是一个经典的testing的经典案例。 testing结束后,结果会回来,所以你的expect调用不会发生在他们可以影响testing的环境中。

我注意到你的代码和jasmine-node文档之间的一个区别是传递给it的函数应该作为参数done ,但是你有() =>而不是(done) => 。 这可能会导致你看到的行为。

Kev是正确的,但Jasmine中的语法涉及在asynchronous执行完成后将您的期望语句放在promise结果中。 它看起来像这样:

 it ("should do a thing with promises", function(done) { myObject.doAThingWithPromises('') .then(function (promiseResult) { expect(promiseResult).toBeDefined(); done(); }) });